Pyhton网络爬虫实例_豆瓣电影排行榜_Xpath方法爬取
-----------------------------------------------------------学无止境------------------------------------------------------
前言:大家好,欢迎来到誉雪飞舞的博客园,我的每篇文章都是自己用心编写,
算不上精心但是足够用心分享我的自学知识,希望大家能够指正我,互相学习成长。
转载请注明: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方法爬取的更多相关文章
- Pyhton网络爬虫实例_豆瓣电影排行榜_BeautifulSoup4方法爬取
-----------------------------------------------------------学无止境------------------------------------- ...
- selenium和phantomjs,完成豆瓣音乐排行榜的内容爬取
代码要多敲 注释要清晰 哪怕再简单 #使用selenium和phantomjs,完成豆瓣音乐排行榜的内容爬取 #地址:https://music.douban.com/chart #导入需要的模块 f ...
- Python 网络爬虫 004 (编程) 如何编写一个网络爬虫,来下载(或叫:爬取)一个站点里的所有网页
爬取目标站点里所有的网页 使用的系统:Windows 10 64位 Python语言版本:Python 3.5.0 V 使用的编程Python的集成开发环境:PyCharm 2016 04 一 . 首 ...
- 转:Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)
Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...
- Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)
Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...
- 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】
[摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...
- 转:【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图
[摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...
- 豆瓣电影排行简单数据爬取_pyhton
先安装一下requests和bs4库: cmd下面:python -m pip install bs4 -i https://pypi.douban.com/simple 代码: import req ...
- Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
随机推荐
- 【题解】洛谷P1032 [NOIP2002TG]字串变换(BFS+字符串)
洛谷P1032:https://www.luogu.org/problemnew/show/P1032 思路 初看题目觉得挺简单的一道题 但是仔细想了一下发现实现代码挺麻烦的 而且2002年的毒瘤输入 ...
- flask总结之session,websocket,上下文管理
1.关于session flask是带有session的,它加密后存储在用户浏览器的cookie中,可以通过app.seesion_interface源码查看 from flask import Fl ...
- 插入排序_c++
插入排序_c++ GitHub 文解 插入排序的核心思想是针对于 N 个元素进行排序时,共进行 K = (N-1) 次排序,第 M 次排序时将第 M + 1 个元素插入前 M 个元素中进行排序. 图解 ...
- BufPay.com 个人收款接口 接入步骤
作为独立开发者产品需要收款是非常麻烦的,注册公司维护成本太高,市面上各种收款工具要么手续费太高,要么到账很慢,体验很不好. 看到 「BufPay.com 个人收款」 这个收款工具,挺有意思的.原理是监 ...
- ubnutu 安装protocol buffer
工作中需要使用protocol buffer,需要编译出protocol buffer的动态链接库,然后在别的makefile中链接它, 我的环境是ubnutu16.04,64bit,使用的proto ...
- HDU1398 Square Coins(生成函数)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- 增强for循环和迭代器
package example6; import java.util.ArrayList;import java.util.Iterator;import java.util.List; class ...
- python中的super怎么用?
面向对象有这个强大特点和作用, 著名的三大特点:封装, 继承, 多态 这篇博客写的是super()的简单理解和使用 今天在读restframework的源码的时候, 发现源码中使用了super, 依以 ...
- python函数的四种参数传递方式
python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...
- 《PHP发送邮件PHPMailer》系列分享专栏
<PHP发送邮件PHPMailer>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201726.html 文章 PHPMailer ...