最近这段时间自己一直在学习数据分析这一块,其中关于数据收集方面就可以用到爬虫。那么自己也想把最近所学的一些知识分享给大家。
爬虫的方式有很多种,我觉得比较方便的selenium和request,这篇文章介绍request的方式,末尾附上代码。
首先来看爬取图片的布骤:
1、抓取网页url
2、找到自己想要爬取的内容,并解析内容(这里是所有布骤最难的)
3、保存图片包括(文件夹的路径,图片名称)
4、翻页爬取
学会以上的基本布骤基本上是OK啦,有些高手还会加入判断,或者多线程运行等等,哎算了。。。
对了在开始之前,需要引入包,这里我们会用到request抓取包,os路径保存包,etree解析包
import os
import requests
from lxml import etree
然后开始我们的爬取,这里我们用果壳网的在行来实验。
这个网站:
最终的结果是图片和人名,这样子
打个码,
网址是这个:
[https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=7](https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=1)
一、爬取网页的主要代码
pic_hxml=requests.get(url,headers=headers)
url是网页的网址
headers是头部,在网页爬取中,很多网站会有反爬的设施,而头部一般来说是一个身份验证一样的代码,模拟人的操作。一般来说头部用User-Agent的代码,这个因个人电脑而异。
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
二、解析与找寻内容
我们用etree来解析网页,大家可看到。
html=etree.HTML(pic_hxml.text)
pic1="//section[@class='flex']/img[@class='mentor-card__avatar']/@src"
name1="//div[@class='flex align-center wrapper']/span[@class='mentor-card__name']/text()"
pic2=html.xpath(pic1)
name2=html.xpath(name1)
其中最难的就是 pic1和name1的寻找了,我在这里是用工具帮忙的利用谷歌浏览器,安装“Xpath Helper”插件。
a.安装好后点击插件,你可看到弹出两个小框框
b.按住shift+ctrl,鼠标移动到哪,就需要提取的代码了。
c.适当缩短内容,达到遍历整个网页。
我们要的结果是这个:
然后按同样的方式提取名字,注意文字后要加"/text()"才能显示。
最后用name2=html.xpath(name1),就完成了提取。
三、保存文件
1、设置文件路径,文件名和图片的url
用for循环解封name和pic
for name,pic in zip(name2,pic2):
imgurl=pic#这是图片的url
path1=os.path.abspath('D:/Users/17617/PycharmProjects/untitled/爬虫练习库/刘亦菲')#这是文件的报春路径
img_name=name+'.jpg'#图片的名字。别忘了'.jpg'不然图片没法看
imgpath=os.path.join(path1,img_name)#将路径与文件名结合
2、保存
很简单的三行代码,提取图片,打开设置好的“路径名称盒子”,用“wb"表示写入,然后将图片放进去。
response=requests.get(imgurl)
with open (imgpath,'wb') as f:
f.write(response.content)
四、如果你想用循环提取图片,多看几分钟刷刷的快感,这里就需要设置翻页。
for i in range(1,7,1):
url='https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page='+str(i)
我们这里设置for循环,i
通常url='www.……'+str(i)
完成翻页设置,当然不同的网页,翻页的方法也不同,但用心寻找还是可以找到规律的,然后根据规律进行循环。
那么我的爬虫是按这些布骤写的,利用函数关系将4个布骤进进行连接。
完整代码:
import os
import requests
from lxml import etree
#保存设置
def down_load(imgpath,imgurl):
response=requests.get(imgurl)
with open (imgpath,'wb') as f:
f.write(response.content)
# shutil.copyfileobj(response.raw,f)
f.close()
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
#提取内容
def pic_url(url,headers):
pic_hxml=requests.get(url,headers=headers)
html=etree.HTML(pic_hxml.text)
pic1="//section[@class='flex']/img[@class='mentor-card__avatar']/@src"
name1="//div[@class='flex align-center wrapper']/span[@class='mentor-card__name']/text()"
pic2=html.xpath(pic1)
name2=html.xpath(name1)
for name,pic in zip(name2,pic2):
imgurl=pic
path1=os.path.abspath('D:/Users/17617/PycharmProjects/untitled/爬虫练习库/刘亦菲')
img_name=name+'.jpg'#别忘了'.jpg'不然图片没法看
imgpath=os.path.join(path1,img_name)
print('正在下载',img_name)
print('正在下载', imgurl)
down_load(imgpath,imgurl)
#翻页设置
for i in range(1,7,1):
url='https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page='+str(i)
pic_url(url,headers)
希望对还在学习爬虫的朋友能够起到帮助作用,如果你还在学习,最好自己能够尝试一下其他的网站,不断练习试错和总结。
有什么问题欢迎在下方留言提问。
本人正在深圳学习数据分析,我的微信是:fxfrom2013
欢迎加我互相交流,互相学习。