-----------------------------------------------------------学无止境------------------------------------------------------

前言:大家好,欢迎来到誉雪飞舞的博客园,我的每篇文章都是自己用心编写,

算不上精心但是足够用心分享我的自学知识,希望大家能够指正我,互相学习成长。

转载请注明:https://www.cnblogs.com/wyl-pi/p/10510599.html

这段话从百度就有,给你们省功夫直接看吧。

XPath的使用方法: 
首先讲一下XPath的基本语法知识: 
四种标签的使用方法 
1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。 
2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作 
3) /text() 获取当前路径下的文本内容 
4) /@xxxx 提取当前路径下标签的属性值 
5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。 
6) . 点 用来选取当前节点 
7) .. 双点 选取当前节点的父节点 
另外还有starts-with(@属性名称,属性字符相同部分),string(.)两种重要的特殊方法后面将重点讲。

咳咳,你要确保以上看懂了,不然不需要往下看了。或者看个差不多了也可以往下,看例子就明白了;

我们先普及一下Xpath的基本用法

#xpath的基本使用方法from lxml import etreeweb_data = '''<div><ul><li class="item-0"><a href="link1.html">first item</a></li><li class="item-inactive"><a href="link3.html">second item</a></li><li class="item-1"><a href="link4.html">third item</a></li><li class="item-0"><a href="link5.html">fourth item</a></ul></div>
'''
#(1)etree.tostring(html)将标签补充齐整,是html的基本写法
html = etree.HTML(web_data.lower())
print("html_1 {}\n".format(html))
print(type(html))
result = etree.tostring(html)
print("\n",type(result))
print('''result.decode("utf-8")_1 \n{}\n\n'''.format(result.decode("utf-8")))#(2.0)获取标签里的内容,获取a标签的所有内容,a后面就不用再加“/”否则报错
html = etree.HTML(web_data)
print(type(html))
html_data = html.xpath('/html/body/div/ul/li/a')
print("html_2.0 {}".format(html))
for i in html_data:print("i.text_2.0 {}\n".format(i.text))
print("\n")#(2.1)写法二(直接在需要查找的标签后面加一个/text()就行)
html = etree.HTML(web_data)
html_data = html.xpath('/html/body/div/ul/li/a/text()')
print("html_2.1 {}".format(html))
for i in html_data:print("i_2.1 {}\n".format(i))
print("\n")#(3)使用pasrse打开html文件
html = etree.parse("xpath_data.xml")
html_data = etree.tostring(html,pretty_print=True)
res = html_data.decode('utf-8')
print(res)

运行结果如下:

html_1 <Element html at 0xc4f558>

<class 'lxml.etree._Element'>

<class 'bytes'>
result.decode("utf-8")_1
<html><body><div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-inactive"><a href="link3.html">second item</a></li>
<li class="item-1"><a href="link4.html">third item</a></li>
<li class="item-0"><a href="link5.html">fourth item</a>
</li></ul>
</div>
</body></html>

<class 'lxml.etree._Element'>
html_2.0 <Element html at 0xc79760>
i.text_2.0 first item

i.text_2.0 second item

i.text_2.0 third item

i.text_2.0 fourth item

html_2.1 <Element html at 0xc4f558>
i_2.1 first item

i_2.1 second item

i_2.1 third item

i_2.1 fourth item

<html>
<body><div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-inactive"><a href="link3.html">second item</a></li>
<li class="item-1"><a href="link4.html">third item</a></li>
<li class="item-0"><a href="link5.html">fourth item</a>
</li></ul>
</div>
</body>
</html>

Xpath的特殊用法:

#xpath特殊用法from lxml import etree
#(1)starts-with解决标签相同开头的属性值
html="""<body><div id="aa">aa</div><div id="ab">ab</div><div id="ac">ac</div></body>
"""
example = etree.HTML(html)
content = example.xpath("//div[starts-with(@id,'a')]/text()")
for each in content:print(each)
print("(1) is over.\n")#(2)string(.)标签套标签
html1="""<div id="a">left<span id="b">right<ul>up<li>down</li></ul>east</span>west</div>
"""
pil = etree.HTML(html1)
data = pil.xpath("//div[@id = 'a']")[0]
#print("data's type is {}".format(type(data)))
print("data {}\n".format(data))
info = data.xpath("string(.)")#replace是将新的字符串替换旧字符串,第三个参数是max,替换不超过max次;
content = info.replace('\n','').replace(' ','')
for i in content:print(i)
print("(2) is over\n")

运行结果如下:

aa
ab
ac
(1) is over.

data <Element div at 0x36483f0>

l
e
f
t
r
i
g
h
t
u
p
d
o
w
n
e
a
s
t
w
e
s
t
(2) is over

------------------------Xpath Learn_Test Is Over-------------------------

用法介绍完了,我们的正文终于来了:

Xpath豆瓣口碑周榜爬取程序:

import bs4
import requests
from bs4 import BeautifulSoup
from lxml import htmlj = 0
tplt = "{0:{1}^10}"
url='https://movie.douban.com/' # 需要爬数据的网址
page=requests.Session().get(url) # 维持一个回话
#print(type(page))
tree=html.fromstring(page.text) # 在解析xml格式时,将字符串转换为element对象,解析树的根节点
result=tree.xpath('//td[@class="title"]//a/text()') #获取需要的数据print(tplt.format("Movie_Name Top 10 of Week:",chr(12288)))
for i in result:if j<10:print(tplt.format(result[j],chr(12288)))j += 1#print(result)

里面要讲的也就只有fromstring方法需要讲解一下:

fromstring() 可以在解析xml格式时,将字符串转换为Element对象,解析树的根节点。

在python中,对返回的page.txt做fromstring()处理,可以方便进行后续的xpath定位等。
如:
page = requests.get(url)
data = html.fromstring(page.text)
getData = data.xpath('........')

运行结果:

总结:

如何呢?我为您编撰的这两篇豆瓣电影排行榜python代码实现感觉是不是差别很明显,首当其冲的就是这个代码数量少了两三倍,

可不是一点半点了,所以学习的途径,方法或者说一个问题的解决方法的的确确是多样的、丰富的,切忌一成不变一个方法用到 “ 海枯石烂 ” ,

我们要坦然敢于接受比自己优秀的人、事,并从中虚心的去学习他们的闪光点充实自己,为自己加料,逐渐实现自己的升华。

相信自己!!!!

相信自己!!!!

相信自己!!!!

你们好我是誉雪飞舞,再会。

如果觉得我的文章还不错,关注一下,顶一下 ,我将会用心去创作更好的文章,敬请期待。

转载于:https://www.cnblogs.com/wyl-pi/p/10510599.html

Pyhton网络爬虫实例_豆瓣电影排行榜_Xpath方法爬取相关推荐

  1. python爬电影排名用os bs4_Pyhton网络爬虫实例_豆瓣电影排行榜_BeautifulSoup4方法爬取...

    -----------------------------------------------------------学无止境------------------------------------- ...

  2. Java网络爬虫--一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库

    一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 目录 一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 第一步:创建项目,搭建项目结构 p ...

  3. 爬虫实例之豆瓣电影排行榜

    from bs4 import BeautifulSoup from lxml import html import xml import requests#不加头部直接爬取的话,返回值为空 head ...

  4. Golang实现并发版网络爬虫:豆瓣-电影名人数评分爬取并保存文件

    爬取豆瓣电影信息: 双向爬取: 横向:以页为单位.纵向:以一个页面内的条目为单位. 横向: https://movie.douban.com/top250?start=0&filter= 1 ...

  5. Python爬虫之豆瓣电影评论数据的爬取(十四)

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  6. Python网络爬虫与信息提取(17)—— 题库爬取与整理+下载答案

    前言 上一节实现了题目的整理,没整理答案是不完整的,所以这一节加上答案的爬取. 上一节地址:Python网络爬虫与信息提取(16)-- 题库爬取与整理 效果 思路 爬答案有点难搞,像这种题库的答案都是 ...

  7. 爬虫笔记(七)——利用selenium对猫眼、豆瓣电影榜单的爬取

    系列文章目录 提示: 爬虫学习笔记(四)--糗百爬虫遇到的反爬 爬虫学习笔记(三)--利用JSON爬取豆瓣热映的使用 爬虫学习笔记(二):requests基础用法之爬取各类主流网站2 爬虫学习笔记(一 ...

  8. Python网络爬虫(七):百度文库文章爬取器

    在用前面的方法爬取百度文库的文章时,发现只能爬取已显示出来的几页文章,而对于没有显示的页数则无法获得其内容.如果要完整的看到整篇文章,需要手动地点击底下的"继续阅读",使所有的页数 ...

  9. 爬虫项目之豆瓣电影排行榜前10页

    目录 一.学习资源: 二.知识点介绍 1.urlib库的基本使用 ​ 2.使用实例 ①获取网页源码 ②从服务器下载网页.图片.视频 3.UA介绍 ①简介 ②实例 三.项目详细讲解 1.分析 2.步骤 ...

  10. python分布式爬虫开题报告范文_基于Python的豆瓣Top250排行榜影片数据爬取和分析开题报告...

    一.选题依据:(简述研究现状,说明该毕业设计的设计目的及意义) 研究现状 Python是一门很全面的语言,又随着大数据和人工智能的兴起,广受爬虫设计者们的青眯.设计者们运用Python语言的框架-Sc ...

最新文章

  1. android studio 顶部导航栏_Android10 手势导航开发与处理:边到边(I)
  2. 【学习笔记】月末操作-自动清账
  3. Eclipse插件中的SLF4J登录
  4. PyTorch的hook及其在Grad-CAM中的应用
  5. VisualAssistX中文注释提示错误 解决办法
  6. 18 比较数组找出最大两个数
  7. 逻辑运算符 用法解释
  8. laravel身份证号码验证
  9. Three.js地球开发—1.经纬度转球面坐标
  10. 面试官:生产环境中 CPU 利用率飙高怎么办?
  11. 打造国云安全品牌,铸牢企业云上安全防线
  12. 《德鲁克管理思想精要》读书笔记2 - 企业的宗旨、目标
  13. Techo TVP物联网开发者峰会青润的总结(带视频和完整未剪切音频版本)
  14. 今天听得好多老的电影的配乐啊
  15. 如何开启任务计划程序
  16. 东方财富股票交易接口数据怎么执行出来?
  17. es文件管理器 web服务器,强烈推荐:云盘 = ES文件浏览器app “ + ”穿越派软件
  18. 行式数据库评测:Oracle 11g R2企业版
  19. easy_sanic更便捷实用sanic,支持orm、restful
  20. 2018-5-18笔记

热门文章

  1. TensorFlow学习笔记——自然语言处理
  2. Git版本控制:Git高级教程
  3. freopen()函数文件流重定向和文件流的清除
  4. Attention机制的小理解
  5. 【pandas】column变index,dataframe转置
  6. python学习浅谈(python2.x以及python3.x的区别、IDE)
  7. mysql 变量类型_MySQL 变量类型
  8. 不可识别的字符转义序列_大庆事业单位车牌识别道闸多少钱,感应小区车牌识别道闸系统...
  9. postgresql安装hypopg
  10. Ros学习笔记(四)创建Ros消息