爬虫大约分三种:
- 通用爬虫: 获取相关页面整页数据。
- 聚焦爬虫:根据所需抓取页面指定的数据。
- 增量爬虫:检测到网页上数据有更新时,获取当前更新过的数据。
现在开始学习聚焦爬虫,因此需要对页面进行数解析,从而选到我们所需的数据。
网页的数据解析一般有三种:
1.正则表达式。
2.bs4
3.xpath
用正则表达式就是通过模式匹配爬取网页上的数据。
下面的例子是将网页中的图片地址用正则表达式取出,然后把该地址上的图片保存到本地。
例子中的网页形式如下。
首先取得网页的图片的地址(src="XXXX...")查看网页源码,放图片格式是这样的(如下图),因此得到正则表达式为:
ex='<div class="imbimg">.*?<img.*?src="(.*?)".*?/></a></div>',其中括号内匹配正则表达式。
注意图片是二进制,所以用content ,image=requests.get(url=image_src,headers=headers).content
import requests
import re
import os
if __name__=='__main__':
#判断有无文件夹,没有就建立
if not os.path.exists("./images"):
os.mkdir("./images")
url="http://www.iccno.com/mm/"
#设置User-Agent
headers={ "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
#取得整个页面文本
pagetext=requests.get(url=url,headers=headers).text
#print(pagetext)
ex='<div class="imbimg">.*?<img.*?src="(.*?)".*?/></a></div>'
images=re.findall(ex,pagetext,re.S)
print(images)
for image_src in images:
#取得图片文件,图片为二进制,所以.content
image=requests.get(url=image_src,headers=headers).content
image_path="./images/" + image_src.split("/")[-1]
print(image_path)
with open(image_path,"wb") as fp:
fp.write(image) #存储图片
print("end")