爬虫
爬虫的概念
络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
爬虫的步骤
- 准备目标站点的地址,然后在浏览器上分析一下网站
- 网络请求,下载网站源代码
- 从源码中解析你想要的内容
- 保存内容
- 整理数据结果
创建项目,开始最简单的爬虫
#目标站点的地址
url='https://www.i4.cn/wper_1_0_0_1.html'
#引入网络请求的库
from urllib import request
#进行网络请求,返回响应对象
resp=request.urlopen(url)
#读取响应体
content=resp.read()
print(content)
因为在写爬虫的时候,经常会遇到有反爬虫机制,对爬去速度和次数都有影响,所以,我们在爬取时最好爬一次,然后保存到本地
# 打开或者创建一个文件
file = open('i4.html', 'w', encoding='utf-8')
# 把下载的源码保存到本地
content = str(content, encoding='utf-8')
file.write(content)
保存到本地之后,上面请求和下载就不用再执行了,我们一般封装为一个方法,在我们再次需要请求的时候再调用,那么完整的代码:
def install():
# 目标站点的地址
url = 'https://www.i4.cn/wper_1_0_0_1.html'
# 进行网络请求,返回响应对象
resp = request.urlopen(url)
# 读取响应体
content = resp.read()
print(content)
# 打开或者创建一个文件
file = open('i4.html', 'w', encoding='utf-8')
# 把下载的源码保存到本地
content = str(content, encoding='utf-8')
file.write(content)
pass
解析内容
我们要先从本地读取内容
#读取本地的内容
file = open('i4.html', 'r', encoding='utf-8')
content=file.read()
对内容进行解析,需要一个解析工具,常用的几个有:bs4 、pyquery两种解析库,也可以xpath解析,或者用正则表达式,初学者使用bs4比较简单,引入bs4库,这个库是第三方,需要先下载,下载方式:
1: 在命令行中 输入 pip install bs4
2: pycharm开发工具也有下载的地方:
file — settings

点右上角+ 号 ,出来下一个界面
输入你要的库,点左下角的下载即可,等待下载完成
那么接下来,就可以进行解析
#获取解析工具的对象:参数是要解析的内容和解析的规则
soup= BeautifulSoup(content,'html.parser')
接下来根据id或者class或者其他属性,一级一级往下找自己想要的内容
#getElementsByClassName(),根据class找,返回值为列表
# ibox=soup.select('.ibox')[0]
# # # print(ibox)
# ibox=soup.select('#wper')
# print(ibox)
#select()参数无论是id还是class,返回值都是列表
#select_one('')参数无论是id还是class,返回值都是单个
ibox=soup.select_one('#wper')
#jbox=soup.find(attrs={'class':'jbox'})
jbox=soup.find(class_='jbox')
kbox=jbox.find(class_='kbox')
list=kbox.find_all(class_='list')
for item in list:
img=item.select_one('.wper_img')
#获取标签某个属性的值
imgUrl=img['src']
print(imgUrl)
在这里,bs4有几种查找的方法:find find_all select select_one
注意使用方式就行
下载:直接可以用request下载,第一个是图片地址,第二个是保存的路径
savePath=name+'.jpg'
request.urlretrieve(imgUrl,savePath)