栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

05爬虫-lxml模块

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

05爬虫-lxml模块

通过lxml模块xpath语法爬取某壁纸链接
#导入requests模块
import requests
#导入etree
from lxml import etree

class meinv(object):
    #初始化函数
    def __init__(self):
    	#设置url
        self.url="https://pic.netbian.com/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[@]/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://pic.netbian.com'+mn.xpath('./@src')[0]
            print(temp['src'])
            
            #将筛选出来的数据添加进列表data_list
            data_list.append(temp)

        try:
        		#此处xpath也是,直接通过@返回参数中的数据了
        		#查找当前页面的下一页网址
            next_url='https://pic.netbian.com/' + 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()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/858733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号