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

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

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

转载请注明: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 etree

web_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 html j = 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代码实现感觉是不是差别很明显,首当其冲的就是这个代码数量少了两三倍,

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

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

相信自己!!!!

相信自己!!!!

相信自己!!!!

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

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

Pyhton网络爬虫实例_豆瓣电影排行榜_Xpath方法爬取的更多相关文章

  1. Pyhton网络爬虫实例_豆瓣电影排行榜_BeautifulSoup4方法爬取

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

  2. selenium和phantomjs,完成豆瓣音乐排行榜的内容爬取

    代码要多敲 注释要清晰 哪怕再简单 #使用selenium和phantomjs,完成豆瓣音乐排行榜的内容爬取 #地址:https://music.douban.com/chart #导入需要的模块 f ...

  3. Python 网络爬虫 004 (编程) 如何编写一个网络爬虫,来下载(或叫:爬取)一个站点里的所有网页

    爬取目标站点里所有的网页 使用的系统:Windows 10 64位 Python语言版本:Python 3.5.0 V 使用的编程Python的集成开发环境:PyCharm 2016 04 一 . 首 ...

  4. 转:Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)

    Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...

  5. Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)

    Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...

  6. 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  7. 转:【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  8. 豆瓣电影排行简单数据爬取_pyhton

    先安装一下requests和bs4库: cmd下面:python -m pip install bs4 -i https://pypi.douban.com/simple 代码: import req ...

  9. Python爬虫教程-17-ajax爬取实例(豆瓣电影)

    Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...

随机推荐

  1. 动态截屏软件jpg格式

    软件下载地址:https://github.com/weibanggang/jiedu 开始截屏 保存路径 生成图片 预览

  2. phpstudy 出现You don't have permission to access / on this server.

    You don't have permission to access / on this server. 去掉vhost文件中的Options FollowSymLinks ExecCGI 第一次发 ...

  3. C#通过拼接协议的方式来发送邮件类库

    using System; using System.Collections.Generic; using System.Net; using System.Net.Mail; using Syste ...

  4. React-Navigation web前端架构

    React-Navigation 前端架构 准备 /*安装组件*/ npm install --save react-navigation npm install --save react-nativ ...

  5. Java 循环结构

    Java 循环结构 - for, while 及 do...while 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java中有三种主要的循环结构: whi ...

  6. Code First 二 DataAnnotation 数据注解

    Code-First中配置域类 我们在前一节学习了默认的代码优先约定.Code-First使用默认约定从您的域类构建概念模型.Code-First利用称为约定而不是配置的编程模式.这意味着您可以通过配 ...

  7. Swift _ OC _ 混编

    Swift _ OC _ 混编 在OC环境下使用Swift. GitHub源码

  8. 我的前端工具集(六)Ajax封装token

    我的前端工具集(六)Ajax封装token   liuyuhang原创,未经允许禁止转载 在单点登陆中,或登陆验证后,不应该每次都验证用户名和密码, 也不应该将用户名密码存入cookie中(虽然很多都 ...

  9. 装饰器概念&实际使用干货

    定义: 本质是函数(装饰其他函数),是为其他函数添加附加功能 原则: 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式   实现装饰器知识储备: 函数及“变量” 高阶函数 把一个函数名当做实参 ...

  10. 『ACM C++』 PTA 天梯赛练习集L1 | 044-45

    记录今日刷题 ------------------------------------------------L1-044--------------------------------------- ...