版本说明
Python 3.10.2
使用到的功能索引
- 网络请求 requests
- 网页数据解析 BeautifulSoup,对网页列表进行分析,抓取详情页信息
- 数据保存到SQLite sqlite3
- 保存图片到本地
记录抓取过程
这回以抓取《B站的动森Wiki》中的动物数据为例,抓取过程大致为:访问分析列表 -> 摘取详情链接 -> 访问分析详情 -> 抓取数据 -> 抓取保存图片信息 -> 保存数据到 SQLite
访问分析列表
def get_list(conn):
url = 'https://wiki.biligame.com/dongsen/%E5%B0%8F%E5%8A%A8%E7%89%A9%E5%9B%BE%E9%89%B4'
strhtml = requests.get(url)
soup = BeautifulSoup(strhtml.text, 'html.parser')
data = soup.find_all(name='tr', attrs={'data-param2': True})
i = 0
for tr in data:
i = i + 1
a = tr.find(name='a', attrs={'href': True})
get_one(conn, f'https://wiki.biligame.com{a.get("href")}')
目前了解到的 BeautifulSoup 中对页面信息有两种分析查找方法html.parser
和lxml
。
- html.parser:这里用来按照节点名称和节点属性查找 HTML 的 DOM 节点。
- lxml:用来按照 xpath 查找 DOM 节点。
访问分析详情
代码节选
def get_one(conn, url):
if url[-6:] == 'String' or url[-3:] == 'png':
return
strhtml = requests.get(url)
soup = BeautifulSoup(strhtml.text, 'lxml')
json = {}
data = soup.select('#mw-content-text > div > div.box-poke-big > div.box-poke-left > div:nth-child(2) > font.box-font')
json['生日'] = data[0].text
data = soup.select('#mw-content-text > div > div.box-poke-big > div.box-poke-right > div > div > a > img')
json['照片'] = data[0].get('src')
json['照片'] = download_img(json['照片'], '/Downloads/pic/photo', json['姓名'])
抓取保存图片信息
def download_img(img_url, path, name):
r = requests.get(img_url)
file = f'{name}{img_url[img_url.rfind("."):]}'
if r.status_code == 200:
# 将内容写入图片
open(f'{path}\\{file}', 'wb').write(r.content)
del r
return file
保存数据到 SQLite
对数据的存储需要分几步完成
- 打开数据库连接
- 数据处理和保存
- 提交
- 关闭数据库连接
最外层打开/关闭数据库连接
if __name__ == '__main__':
conn = sqlite3.connect('dongsen.sqlite')
print("数据库打开成功")
... ...
conn.close()
print("数据库已关闭")
数据处理和保存/提交
conn.execute(f'insert into animal (birthday, photo, ...) '
f'values '
f'(\'{json["生日"]}\',\'{json["照片"]}\', ...)')
conn.commit()
参考
SQLite - Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
beautifulsoup4 bs4 find_all & find 函数解析
python爬虫:BeautifulSoup 使用select方法详解
Python 正则表达式
python-正则表达式RE
python 爬虫爬取内容时, \xa0 、 \u3000 的含义与处理方法
FEATURED TAGS
html
sqlite
抓取
爬虫
python
宕机
通关
游戏
ruoyi
若依
高项
论文
软考
工具
Tools
Windows
禅道
Nacos
iconfont
icon
transition
大数据
Kafka
Flume
CA
Whistle
抓包
idea
Gateway
梯子
代理
Clash
Halo
lanproxy
测试
Solo
保护费
Retropie
复古派
RaspberryPi
树莓派
KeePass
Password
密码
https
GBK
Sublime Text
CSS
微信商户
渠道
Android
redis
JMeter
CentOS
跨域
服务中心
注册中心
Consul
消息队列
RabbitMQ
SpringCloud
ssh
公钥
Mac
表情
乱码
ssl
sqlserver
jdbc
java8
阿里云
aliyun
tomcat
二维码
公众号
微信
主从
mysql
廖师兄
SpringBoot
微服务
Docker
解密
加密
CryptoJS
js
assembly
maven
blade
宝可梦
漂移
JoyCon
WiiU
npm
vue
node
定时
crontab
Linux
Switch
Nintendo Switch
archive
git
任天堂
3DS
动森
PB汉化组
汉化
动物之森
手柄
八位堂
对比
PS3
NS
nginx
blog
java