在上一小节中我们已经拿到了想要爬取的页面的源代码了,后面我们就可以对代码进行分析从而提取出我们想要的东西了。
对于我们想要爬取的页面直接进入抓包工具进行分析
选中任意一张图片(如图中1)即可在对应的页面代码中显示出对应它的那段代码
我们需要的是图片的地址,有了地址就可以拿到图片从而保存图片,因此我们来分析一波:
首先定位到class值为’ui segment imghover’的div标签(图中2),然后点开第一个div标签(图中3),点开其下的a标签(图中4)发现a标签下的img标签(图中5)中的data-original藏有图片的地址(图中6)(可以将后面的url复制到浏览器中发现可以拿到这个图片)。
我们可以通过分析写出xpath表达式来爬取数据。
1.首先要获取class值为’ui segment imghover’的div标签下的所有子div标签
tree_list=tree.xpath('//div[@class="ui segment imghover"]/div')
2.遍历每个子div标签获取每个图片的url
for li in tree_list:
#每次遍历时的标志变量也是一个标签因此可以继续使用xpath方法解析
new_url=li.xpath('./a/img/@data-original')[0]
image_title=li.xpath('./a/img/@title')[0]
image_path='表情包Libs/图片'+str(count)+'.jpg'
3.对拿到的图片url发送请求,然后获取相应内容,将相应内容写入本地
#对于拿到图片的url,对其发送请求获取相应内容然后存入文件中
response=requests.get(url=new_url,headers=headers)
page_content=response.content
with open(image_path,'wb') as fp:
#将图片的相应内容写入到文件中
fp.write(page_content)
print("缓存完毕:"+image_title)
附上完整的代码及注释
#引入requests库
import requests
#引入lxml库是为了引入etree进行数据解析
from lxml import html
#引入os库是为了将爬取到的数据保存至本地
import os
#想要爬取页面的url
url='https://fabiaoqing.com/biaoqing'
#数据包中的User-Agent
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 Edg/89.0.774.77'
}
#利用requests的get方法发送请求,会返回一个响应对象response
response=requests.get(url=url,headers=headers)
#使用响应对象response的content属性获取响应对象的值
page_content=response.content
#利用html库的etree属性引入etree
etree=html.etree
#将相应内容作为参数传入etree对象的HTML方法中获得tree对象
tree=etree.HTML(page_content)
#利用tree对象的xpath方法进行解析,返回的是一个符合条件的标签的列表
tree_list=tree.xpath('//div[@class="ui segment imghover"]/div')
#如果本目录下不存在表情包Libs这个文件夹就创建
if not os.path.exists('表情包Libs'):
os.mkdir('表情包Libs')
count=0
#对抓取到的标签列表进行遍历
for li in tree_list:
#每次遍历时的标志变量也是一个标签因此可以继续使用xpath方法解析
new_url=li.xpath('./a/img/@data-original')[0]
image_title=li.xpath('./a/img/@title')[0]
image_path='表情包Libs/图片'+str(count)+'.jpg'
count+=1
#对于拿到图片的url,对其发送请求获取相应内容然后存入文件中
response=requests.get(url=new_url,headers=headers)
page_content=response.content
with open(image_path,'wb') as fp:
#将图片的相应内容写入到文件中
fp.write(page_content)
print("缓存完毕:"+image_title)
总结
爬取数据时我们的步骤大致就是:
1.分析页面
2.发送请求
3.数据解析
4.保存本地
其中我们目前只说到了1分析页面,2发送请求
3数据解析常用的方法有(bs4库解析、xpath解析、正则解析)三种在后续会逐步带大家了解。
4保存本地就是文件操作,涉及到的操作就是文件的读写后续也会涉及到。
好啦今天就到这里了下次再见啦