Python爬虫入门(二) (xpath解析表情包)

527次阅读
没有评论

Python爬虫入门(二) (xpath解析表情包)## 标题

在上一节中我们讲了爬虫的基础,以及动手写了一个较为简单的爬虫程序,在本章中我们将学习使用爬虫xpath解析快速的爬取表情包!妈妈终于不用担心我斗图斗不过了!

什么是xpath:XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的

例如如下的html源码:

<!DOCTYPE html> <html> <head> <title></title> </head> <body>

<div class="aa"> <span>my name is kiki</span> <img src="http://xxx1.html"> </div>

<div class="aa"> <span>my name is gigi</span> <img src="http://xxx2.html"> </div>

<div class="aa"> <span>my name is coco</span> <img src="http://xxx3.html"> </div>

</body> </html>

如果想要拿出所有span中的文字内容则可以这样写xpath:

"//div[@class='aa']/span/text()"

如果想要拿出所有img中的图片地址则可以这样写xpath:

"//div[@class='aa']/img/@src"

加下来我们就通过实战来了解:
Python爬虫入门(二)
通过开发者工具可以得出每一种图片都在一个class为items下的a标签中的img标签中,想要爬取到图片,则需要爬取到每一张图片所对应的url。
Python爬虫入门(二)
1、下载lxml包,和下载requests一样,在命令行输入以下内容:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml

2、导入需要的包

import requests from lxml import etree #etree模块用于xpath解析 import os

3、准备工作

if __name__ == '__main__':

if not os.path.exists('img'): #如果在.py的同一级目录下如果不存在img这个文件夹,则创建一个文件夹 os.mkdir('img')

url = 'https://www.biaoqingba.net/hot/page/{}.html' #爬取的网址,page/{}表示第几页

headers = { #进行UA伪装 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56' } page = 20 #指定爬取前20页的图片

4、写爬虫函数
Python爬虫入门(二)
通过观察网页源码的img标签,可以得到图片的url地址可以通过src拿到,图片的标题可以通过title拿到。且所有放有图片的img标签都有一个相同的class等于hot-img。

def spider(url,headers):

response = requests.get(url=url,headers=headers).text #因为返回对象是网页源码,所以这里的格式为text tree = etree.HTML(response) #实例化一个etree.HTML对象,使其能够进行xpath解析 img_url = tree.xpath('//img[@class="hot-img"]/@src') #所有图片的url,返回的是一个列表 title_list = tree.xpath('//img[@class="hot-img"]/@title') #所有图片的标题,返回的是一个列表 try: for index,ele in enumerate(img_url): #遍历图片地址列表,爬取得到图片 img = requests.get(url=ele,headers=headers).content #因为图片为二进制保存形式,所以用content img_type = ele[4:] #得到图片的格式,.jpg或.gif img_path = './img/' + title_list[index]+img_type #图片的保存地址 with open(img_path,'wb') as fp: #'wb'二进制形式打开,这里必须为wb,且这里不能指定encoding = utf-8 fp.write(img) print(title_list[index],"爬取成功") except Exception: pass

5、完善全部代码,并进行爬取

import requests from lxml import etree #etree模块用于xpath解析 import os

def spider(url,headers):

response = requests.get(url=url,headers=headers).text #因为返回对象是网页源码,所以这里的格式为text tree = etree.HTML(response) #实例化一个etree.HTML对象,使其能够进行xpath解析 img_url = tree.xpath('//img[@class="hot-img"]/@src') #所有图片的url,返回的是一个列表 title_list = tree.xpath('//img[@class="hot-img"]/@title') #所有图片的标题,返回的是一个列表 try: for index,ele in enumerate(img_url): #遍历图片地址列表,爬取得到图片 img = requests.get(url=ele,headers=headers).content #因为图片为二进制保存形式,所以用content img_type = ele[4:] #得到图片的格式,.jpg或.gif img_path = './img/' + title_list[index]+img_type #图片的保存地址 with open(img_path,'wb') as fp: #'wb'二进制形式打开,这里必须为wb,且这里不能指定encoding = utf-8 fp.write(img) print(title_list[index],"爬取成功") except Exception: pass

if __name__ == '__main__':

if not os.path.exists('img'): #如果在.py的同一级目录下如果不存在img这个文件夹,则创建一个文件夹 os.mkdir('img')

url = 'https://www.biaoqingba.net/hot/page/{}.html' #爬取的网址,page/{}表示第几页

headers = { #进行UA伪装 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56' }

page = 20 #指定爬取前20页的图片

for page_index in range(page):

spider(url.format(page_index),headers) #调用自定义函数

Python爬虫入门(二)
Python爬虫入门(二)

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计3289字。
新手QQ群:570568346,欢迎进群讨论 Python51学习