首页 > 编程语言 >一个Python爬虫案例,带你掌握xpath数据解析方法!

一个Python爬虫案例,带你掌握xpath数据解析方法!

时间:2023-11-03 14:01:27浏览次数:52  
标签:xpath headers Python text 爬虫 detail url div

xpath基本概念

xpath解析:最常用且最便捷高效的一种解析方式。通用性强。

xpath解析原理

1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中

2.调用etree对象中的xpath方法结合xpath表达式实现标签的定位和内容的捕获。

环境安装

pip install lxml

如何实例化一个etree对象:

from lxml import etree

1.将本地的html文件中的远吗数据加载到etree对象中:

etree.parse(filePath)

2.可以将从互联网上获取的原码数据加载到该对象中:

etree.HTML(‘page_text’)

xpath(‘xpath表达式’)

  • /:表示的是从根节点开始定位。表示一个层级
  • //:表示多个层级。可以表示从任意位置开始定位
  • 属性定位://div[@class='song'] tag[@attrName='attrValue']
  • 索引定位://div[@class='song']/p[3] 索引从1开始的
  • 取文本:
  • /text()获取的是标签中直系的文本内容
  • //text()标签中非直系的文本内容(所有文本内容)
  • 取属性:/@attrName ==>img/src

xpath爬取58二手房实例

爬取网址

https://xa.58.com/ershoufang/完整代码

from lxml import etree
import requests

if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    url = 'https://xa.58.com/ershoufang/'
    page_text = requests.get(url=url,headers=headers).text
    tree = etree.HTML(page_text)
    div_list = tree.xpath('//section[@class="list"]/div')
    fp = open('./58同城二手房.txt','w',encoding='utf-8')
    for div in div_list:
        title = div.xpath('.//div[@class="property-content-title"]/h3/text()')[0]
        print(title)
        fp.write(title+'\n'+'\n')

一个Python爬虫案例,带你掌握xpath数据解析方法!_Chrome

xpath图片解析下载实例

爬取网址

https://pic.netbian.com/4kmeinv/完整代码

import requests,os
from lxml import etree

if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    url = 'https://pic.netbian.com/4kmeinv/'
    page_text = requests.get(url=url,headers=headers).text
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//div[@class="slist"]/ul/li/a')
    if not os.path.exists('./piclibs'):
        os.mkdir('./piclibs')
    for li in li_list:
        detail_url ='https://pic.netbian.com' + li.xpath('./img/@src')[0]
        detail_name = li.xpath('./img/@alt')[0]+'.jpg'
        detail_name = detail_name.encode('iso-8859-1').decode('GBK')
        detail_path = './piclibs/' + detail_name
        detail_data = requests.get(url=detail_url, headers=headers).content
        with open(detail_path,'wb') as fp:
            fp.write(detail_data)
            print(detail_name,'seccess!!')

一个Python爬虫案例,带你掌握xpath数据解析方法!_Chrome_02

xpath爬取全国城市名称实例

爬取网址 

https://www.aqistudy.cn/historydata/完整代码

import requests
from lxml import etree

if __name__ == '__main__':
    url = 'https://www.aqistudy.cn/historydata/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
    }
    page_text = requests.get(url=url,headers=headers).content.decode('utf-8')
    tree = etree.HTML(page_text)
    #热门城市   //div[@class="bottom"]/ul/li
    #全部城市   //div[@class="bottom"]/ul/div[2]/li
    a_list = tree.xpath('//div[@class="bottom"]/ul/li | //div[@class="bottom"]/ul/div[2]/li')
    fp = open('./citys.txt','w',encoding='utf-8')
    i = 0
    for a in a_list:
        city_name = a.xpath('.//a/text()')[0]
        fp.write(city_name+'\t')
        i=i+1
        if i == 6:
            i = 0
            fp.write('\n')
    print('爬取成功')


一个Python爬虫案例,带你掌握xpath数据解析方法!_xml_03

xpath爬取简历模板实例

爬取网址

https://sc.chinaz.com/jianli/free.html完整代码

import requests,os
from lxml import etree

if __name__ == '__main__':
    url = 'https://sc.chinaz.com/jianli/free.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
    }
    page_text = requests.get(url=url,headers=headers).content.decode('utf-8')
    tree = etree.HTML(page_text)
    a_list = tree.xpath('//div[@class="box col3 ws_block"]/a')
    if not os.path.exists('./简历模板'):
        os.mkdir('./简历模板')
    for a in a_list:
        detail_url = 'https:'+a.xpath('./@href')[0]
        detail_page_text = requests.get(url=detail_url,headers=headers).content.decode('utf-8')
        detail_tree = etree.HTML(detail_page_text)
        detail_a_list = detail_tree.xpath('//div[@class="clearfix mt20 downlist"]/ul/li[1]/a')
        for a in detail_a_list:
            download_name = detail_tree.xpath('//div[@class="ppt_tit clearfix"]/h1/text()')[0]
            download_url = a.xpath('./@href')[0]
            download_data = requests.get(url=download_url,headers=headers).content
            download_path = './简历模板/'+download_name+'.rar'
            with open(download_path,'wb') as fp:
                fp.write(download_data)
                print(download_name,'success!!')

一个Python爬虫案例,带你掌握xpath数据解析方法!_Chrome_04

标签:xpath,headers,Python,text,爬虫,detail,url,div
From: https://blog.51cto.com/u_15739596/8165450

相关文章

  • 如何使用python 绘制圈圈大小相同的韦恩图
    百度之换数据,画之,就这么简单哦,如果要画大小一致的圈圈,只需要venn3.py里350代码改成如下即可:#areas=compute_venn3_areas(subsets,normalize_to)areas=compute_venn3_areas((1,1,1,1,1,1,1),normalize_to)importmatplotlib.pyplotaspltfrommatplotlib_vennimpor......
  • 一. 相遇python
    第一节课相遇PythonPython是一门强大的编程语言,让我们开始探索它吧。1.语言1.1自然语言自然语言是人与人之间交流的语言。比如:中文,英文,日文等1.2编程语言1.2.1机器语言机器语言是计算机能够直接理解和执行的语言。它通常以二进制代码的形式表示。示例......
  • 使用Python将多个工作表保存到一个Excel文件中
    使用Python将多个工作表保存到一个Excel文件中excelperfect标签:Python与Excel,pandas本文讲解使用Pythonpandas将多个工作表保存到一个相同的Excel文件中。按照惯例,我们使用df代表数据框架,pd代表pandas。我们仍将使用df.to_excel()方法,但我们需要另一个类pd.ExcelWriter()的......
  • [935] Python Programming in QGIS3
    ref:GettingStartedWithPythonProgramming(QGIS3)ref:1.4.1.UsingPyQGISinstandalonescripts ......
  • swift语言下SurfGen库做的爬虫是什么样的 ?
    Swift语言并没有内置的爬虫库,但是你可以使用第三方库来实现爬虫功能。其中比较常用的是Alamofire和SwiftyJSON。Alamofire是一个基于Swift语言的HTTP网络库,可以用来发送HTTP请求和接收HTTP响应。而SwiftyJSON则是一个用于处理JSON数据的Swift库,可以方便地解析JSON数据。你可以使用......
  • ruby语言怎么写个通用爬虫程序?
    Ruby语言爬虫是指使用Ruby编写的网络爬虫程序,用于自动化地从互联网上获取数据。其中,CRawler是一个基于文本的小型地牢爬虫,它被设计为可扩展,所有游戏数据均通过JSON文件提供,程序仅处理游戏引擎。除此之外,还有其他令人敬畏的网络爬虫,蜘蛛和各种语言的资源,如Python、Java、C#、JavaScr......
  • Python字符串处理:截取、转义字符与格式化符号
    在Python中,字符串是一种基础且重要的数据类型。字符串可以表示文本数据,我们可以在Python中对字符串进行各种操作,如截取、插入、删除、替换等。此外,Python还支持转义字符和格式化符号,让我们能够以各种方式处理字符串。一、字符串截取Python中的字符串可以通过切片(slice)的方式进行......
  • 关于《Selenium3自动化测试实战--基于python语言》
    2016年1月,机缘巧合下我出版了《Selenium2自动化测试实战--基于python语言》这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目中使用Selenium,几乎离不开编程语言和单元测试框架,难道你只用SeleniumIDE去录制/回放脚本么?没想到受到许多测试人员的......
  • 关于《Web接口开发与自动化测试--基于Python语言》
    关于封面logo首先,你会被书封上面logo吸引,这么炫酷?双蛇杖?嗯,这是Requests的新logo。旧的logo是一只乌龟。 新logo是双蛇杖: 看到新logo我首先想到的是火爆全网页游“大天使之剑”,直到前两天一位网友告诉我这是双蛇杖,然后,我百度了一下双蛇杖的神话故事。然后,找到了......
  • 关于《selenium2自动测试实战--基于Python语言》
     关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”。对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位。高手读了会深有体会,豁然开朗。新手读了不止所云,甚至会说,都在扯犊子,看了半天也不知道如何下手。对于操作手册的书,一般会......