1. # 解析原理:
  2. # - 获取页面源码数据
  3. # - 实例化一个etree对象,并且将页面源码数据加载到该对象中
  4. # - 调用该对象的xpath方法进行指定标签定位
  5. # - xpath函数必须结合着xpath表达式进行标签定位和内容捕获
  1. # xpath表达式:
  2. # - 属性定位: //div[@class="song"] 找到class属性值为song的div 返回一个列表
  3. # - 索引层级定位: //div[@class="tang"]/ul/li[2]/a
  4. # - 逻辑运算: //a[@href="" and @class="du"] 并且
  5. # - 模糊匹配: //div[contains(@class, 'ng')] class包含 ng 的div
  6. # //div[startwith(@class, 'ta')] class以 ta 开头的div
  7. # - 取文本: //div[@class="song"]/p[1]/text() div下的文本内容
  8. # //div[@class="tang"]//text() div下以及字标签下的文本内容 返回列表
  9. # - 取属性: // div[@class="tang"]//a[1]/@href

下面上几个小案例:

  1. import requests
  2. from lxml import etree
  3.  
  4. url = 'https://bj.58.com/ershoufang/?utm_source=sem-sales-baidu-pc&spm=85077276202.21974091622&utm_campaign=sell&utm_medium=cpc&showpjs=pc_fg'
  5.  
  6. headers = {
  7. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
  8. }
  9.  
  10. page_text = requests.get(url=url, headers=headers).text
  11.  
  12. tree = etree.HTML(page_text)
  13. li_list = tree.xpath('//ul[@class="house-list-wrap"]/li') # 返回的是Element对象
  14. fp = open('58.csv', 'w', encoding='utf8')
  15. for li in li_list:
  16. title = li.xpath('./div[2]/h2/a/text()')[0] # 局部页面解析要加'.'
  17. price1 = li.xpath('./div[3]//text()')
  18. price = ''.join(price1)
  19. fp.write(title+":"+price+'\n')
  20. fp.close()
  21. print('over')

爬取 58二手房信息

  1. xpath 解析图片资源
  2.  
  3. import requests
  4. from lxml import etree
  5.  
  6. url = "http://pic.netbian.com/4kmeinv/"
  7.  
  8. headers = {
  9. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
  10. }
  11. page_text = requests.get(url=url, headers=headers).text
  12.  
  13. tree = etree.HTML(page_text)
  14. # etree.parse(page_text) 解析本地文件推荐使用
  15. li_list = tree.xpath('//div[@class="slist"]/ul/li')
  16. for li in li_list:
  17. image_name = li.xpath('./a/b/text()')[0]
  18. image_name = image_name.encode('iso-8859-1').decode('gbk')
  19. image_url = 'http://pic.netbian.com'+li.xpath('./a/img/@src')[0]
  20. image_path = './img/'+image_name+'.jpg'
  21. img = requests.get(image_url).content
  22. with open(image_path, 'wb') as f:
  23. f.write(img)
  24. print(image_path+'下载成功')

图片怎么爬取呢?

  1. import requests
  2. import base64
  3. from lxml import etree
  4.  
  5. headers = {
  6. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
  7. }
  8. url = 'http://jandan.net/top'
  9. response = requests.get(url=url, headers=headers)
  10. page_text = response.text
  11. tree = etree.HTML(page_text)
  12. code_list = tree.xpath('//span[@class="img-hash"]/text()')
  13. for img_code in code_list:
  14. img_url = 'http:'+base64.b64decode(img_code).decode()
  15. img_name = img_url.split('/')[-1]
  16. img_path = f'./jd_img/{img_name}'
  17. print(img_url)
  18. content = requests.get(img_url).content
  19. with open(img_path, 'wb') as f:
  20. f.write(content)
  21. print(img_name+'成功')
  22. print('over')

有的时候我找不到我要的图片链接呀

上面是煎蛋网采用了js的方法对图片链接地址进行了base64的加密

  1. # 简历模板爬取(ip禁用问题)
  2. # 解决方法:
  3. # ip代理,
  4. # 请求头中添加Connection字段:close
  5. import requests
  6. import random
  7. from lxml import etree
  8.  
  9. url = 'http://sc.chinaz.com/jianli/free.html'
  10.  
  11. headers = {
  12. 'Connection': 'close', # 每次请求成功之后,发马上断开连接(修改后有几率无法立即生效,出现Httppool...错误- 重新运行)
  13. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
  14. }
  15. page_text = requests.get(url=url, headers=headers).text
  16. tree = etree.HTML(page_text)
  17. a_list = tree.xpath('//div[@id="container"]/div/a[1]')
  18. for a in a_list:
  19. title = a.xpath('./img/@alt')[0].encode('iso-8859-1').decode('utf-8')
  20. detail_url = a.xpath('./@href')[0]
  21. detail_text = requests.get(url=detail_url, headers=headers).text
  22. d_tree = etree.HTML(detail_text)
  23. down_url_list = d_tree.xpath('//div[@class="down_wrap"]//li/a/@href')
  24. down_url = random.choice(down_url_list)
  25. data = requests.get(down_url,headers=headers).content
  26. with open(f'./简历模板/{title}.rar', 'wb') as f:
  27. f.write(data)
  28. print(title+'完成')
  29. print('over')

站长之家模板资源爬取下载

爬虫之lxml - etree - xpath的使用的更多相关文章

  1. lxml etree xpath

    from lxml import etree #####################基本用法: ##################### html = ''' <h1 class=&quo ...

  2. Python爬虫利器三之Xpath语法与lxml库的用法

    前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...

  3. python爬虫(8)--Xpath语法与lxml库

    1.XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...

  4. Python爬虫教程-22-lxml-etree和xpath配合使用

    Python爬虫教程-22-lxml-etree和xpath配合使用 lxml:python 的HTML/XML的解析器 官网文档:https://lxml.de/ 使用前,需要安装安 lxml 包 ...

  5. 爬虫解析库:XPath

    XPath     XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言.最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的 ...

  6. 爬虫之 BeautifulSoup与Xpath

    知识预览 BeautifulSoup xpath BeautifulSoup 一 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: '' ...

  7. Python爬虫之lxml-etree和xpath的结合使用

    本篇文章给大家介绍的是Python爬虫之lxml-etree和xpath的结合使用(附案例),内容很详细,希望可以帮助到大家. lxml:python的HTML / XML的解析器 官网文档:http ...

  8. lxml etree的一个问题

    <div> <a href="xxxx">123</a> <a href="xxxx">45</a> ...

  9. 【译】:lxml.etree官方文档

    本文翻译自:http://lxml.de/tutorial.html, 作者:Stefan Behnel 这是一个关于使用lxml.etree进行XML处理的教程.它简要介绍了ElementTree ...

随机推荐

  1. chrome cpu占用100%

    参考原文地址:https://stackoverflow.com/questions/20276097/chrome-devtools-100-cpu 问题描述,chrome打开devtools开发者 ...

  2. (一)使用appium之前为什么要安装nodejs???

    很多人在刚接触appium自动化时,可能会像我一样,按照教程搭建好环境后,却不知道使用appium之前为什么要用到node.js,nodejs到底和appium是什么关系,对nodejs也不是很了解, ...

  3. 高阶篇:4.2.3)DFMEA现有设计:预防控制与探测控制

    本章目的:在现有设计中,明确预防控制与探测控制的定义和手段. 1.现有控制的填写部位: 2.现行设计控制(h)定义: 作为设计过程的一部分,现行设计控制是已经实施或承诺的活动,它将确保设计充分考虑设计 ...

  4. [转] kerberos介绍

    [From] https://www.cnblogs.com/ulysses-you/p/8107862.html 重要术语 1. KDC 全称:key distributed center 作用:整 ...

  5. Oracle知识转储

    https://blog.csdn.net/u011479200/article/details/53086411 https://www.cnblogs.com/LiYi-Dao/p/9406189 ...

  6. jQuery懒加载插件 – jquery.lazyload.js

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  7. lucene原理

    lucene查找原理: https://yq.aliyun.com/articles/581877

  8. Docker搭建tomcat运行环境(Dockerfile方式)

    上一篇文章的基本做法是通过centOS的官方镜像启动一个容器,然后进入到容器中,手动敲命令安装JDK跟tomcat,这个跟在linux下搭建没有什么区别,只是用来熟悉docker命令,并且在日常开发中 ...

  9. [目录]ASP.NET web api开发实战

    第一章:Restful web service v.s. RPC style web service 第二章:ASP.NET web api v.s. WCF v.s. ASP.NET web ser ...

  10. Struts中Validate()和validateXxx的使用

    Struts中Validate()和validateXxx的使用 学习struts2之后,你会发现validate在之前是没有的!它是怎么实现的呢? validate和validateXxxx都是拦截 ...