xpath是啥,其全称为XML Path Language,即XML路径语言。这是在XML文档中查找信息的语言,可以用来在获取的页面源代码中提取页面信息。我觉得用起来也很简洁,它返回的对象是一个列表。
准备这是等下要用到的库,requests和urllib用于请求并返回页面信息,lxml库xpath做解析用,csv用来保存csv文件,time是为了后面的缓冲,以免访问太过于频繁。如果没有安装的话,在控制台处pip install 就可以了。
import requests from lxml import etree import csv import time import urllib.request定义保存的函数
这次的内容包括标题、作者、描述,所以定义的函数的参数就如图示,值得注意的是,这里用utf-8-sig写入csv文件,我用utf-8写入时出现乱码,所以加了一个-sig,sig是标签的意思,因为有可能python写入csv时杂夹一些标签,这样就容易出现乱码,然后用遍历,一行一行的写入。
def save(title,author,describe):
with open("宠物领养信息.csv",'a',encoding='utf-8-sig',newline = "") as f:
w=csv.writer(f)
for i in range(0,len(title)):
w.writerow([title[i],author[i],describe[i]])
获取请求
这一步主要步骤就是:
1.设置目标
2.设置请求头headers,但是其实也可以不用
3.用requests或者urllib获取请求
这是用requests
r=requests.get(URL,headers=headers).text
这是用urllib
request=urllib.request.Request(url,headers=headers)
t= (urllib.request.urlopen(request)).read()
解析信息
解析信息用xpath就很方便简洁
首先创建一个lxml.etree._Element对象
r=etree.HTML(r)
然后用xpath定位结点,text()获取文本内容例如下面这样
title=r.xpath('//h2[@]/a/text()')
如果要提取图片的话,就需要获取图片的地址,一般都是在结点属性那里,那么获取结点属性内容,可以如下,@后面就是跟着结点属性
href=r.xpath('//div[@]/a/img/@src')
保存图片
虽然上面定义了一个保存到csv文件的函数,但是那主要是保存文本内容的,所以现在用下面的代码保存图片至文件夹,这个文件夹要放在和这个代码文件一个位置,因为我没有指定路径
n=1
for i in href:
r = requests.get(i)
with open(f'./img//{n}.jpg', 'wb') as f:
f.write(r.content)
n=n+1
最后
整个过程大概就是这样了,xpath是很好用,也很简洁,但是有时候获取到的数据可能会比较杂,要经过一定的处理。



