admin 管理员组文章数量: 887021
通过lxml模块xpath语法爬取某壁纸链接
#导入requests模块
import requests
#导入etree
from lxml import etree
class meinv(object):
#初始化函数
def __init__(self):
#设置url
self.url="https://picbian/4kmeinv/index.html"
#设置请求头
self.headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
#请求函数
def get_data(self,url):
#返回网页的源码,字符串格式赋值给respose
response = requests.get(url, headers=self.headers)
return response.content
#此函数功能主要是通过xpath语法搜索需要的数据
def parse_list_page(self, data):
#将requests请求后返回的网页字符串源码通过etree函数转换成一个element对象html
html = etree.HTML(data)
#通过xpath语法在element对象html中筛选出需要的img标签并返回一个列表,列表的内容是找出的img标签的element形式
mn_list=html.xpath('//ul[@class="clearfix"]/li/a/img')
data_list=[]
#for循环将列表中所有element形式的img标签,通过xpath语法从img标签中筛选出需要的数据
for mn in mn_list:
temp={}
#xpath语法查找完后返回的是一个列表,所以要通过下标取数据
#为什么此处xpath返回的不是element对象而直接是想要的数据了,通过@符号直接返回参数中的数据了
temp['title']=mn.xpath('./@alt')[0]
print(temp['title'])
temp['src']='https://picbian'+mn.xpath('./@src')[0]
print(temp['src'])
#将筛选出来的数据添加进列表data_list
data_list.append(temp)
try:
#此处xpath也是,直接通过@返回参数中的数据了
#查找当前页面的下一页网址
next_url='https://picbian/' + html.xpath('//a[contains(text(),"下一页")]/@href')[0]
print(next_url)
except:
#当最后一页时,给一个None
next_url=None
print(next_url)
#将当页筛选出的数据,和下一页的网址返回
return data_list,next_url
def run(self):
#将初始url赋值给next_url
next_url = self.url
#循环请求网页并筛选出数据
while True:
#请求网页返回数据
list_page_data=self.get_data(next_url)
#筛选出需要的数据和下一页的url并返回,将当前页中的下一页的url重新赋值给next_url,使得每次循环,next_url中都是当前页面的下一页的url
data_list, next_url=self.parse_list_page(list_page_data)
#当最后一页时结束循环
if next_url == None:
break
if __name__ == '__main__':
meinv1=meinv()
meinv1.run()
版权声明:本文标题:05爬虫-lxml模块 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726433666h959807.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论