爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP
爬虫1:Requests+Xpath 爬取豆瓣电影TOP
【抓取】:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html
【分页】:参考前文 爬虫系列2:https://www.cnblogs.com/yizhiamumu/p/10267721.html
【保存】:参考前文 爬虫系列3:https://www.cnblogs.com/yizhiamumu/p/10270926.html
【动态】:参考前文 爬虫系列4:https://www.cnblogs.com/yizhiamumu/p/10272977.html
1 电影名称
# 1 Requests+Xpath 菜鸟爬取豆瓣TOP
# 电影名称 '''
Requests+Xpath 爬取豆瓣电影 安装 Python 应用包
pip install requests
pip install lxml 获取元素的Xpath信息并获得文本: 手动获取:定位目标元素,在网站上依次点击:右键 > 检查
file=s.xpath('元素的Xpath信息/text()') 快捷键“shift+ctrl+c”,移动鼠标到对应的元素时即可看到对应网页代码: 在电影标题对应的代码上依次点击 右键 > Copy > Copy XPath,获取电影名称的Xpath: ''' import requests
from lxml import etree url = 'https://book.douban.com/top250'
data = requests.get(url).text
s=etree.HTML(data) film=s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a/@title')
print(film) # 打印:['追风筝的人']
2 全部书名
# 2 全部书名 '''
浏览器经常会自己在里面增加多余的 tbody 标签,我们需要手动把这些标签删掉。 分别复制《追风筝的人》、《小王子》、《围城》、《解忧杂货店》的 xpath 信息进行对比: //*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[2]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[3]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[4]/tbody/tr/td[2]/div[1]/a 比较可以发现书名的 xpath 信息仅仅 table 后的序号不一样,并且跟书的序号一致,于是去掉序号(去掉 tbody),我们可以得到通用的 xpath 信息: //*[@id=“content”]/div/div[1]/div/table/tr/td[2]/div[1]/a ''' import requests
from lxml import etree url = 'https://book.douban.com/top250'
data = requests.get(url).text
s=etree.HTML(data) file=s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[1]/a/@title') for title in file:
print(title) # 打印:
追风筝的人
解忧杂货店
小王子
白夜行
围城
挪威的森林
三体
嫌疑人X的献身
活着
红楼梦
百年孤独
不能承受的生命之轻
看见
达·芬奇密码
平凡的世界(全三部)
三体Ⅱ
三体Ⅲ
简爱(英文全本)
哈利·波特与魔法石
天才在左 疯子在右
送你一颗子弹
傲慢与偏见
我们仨
飘
倾城之恋
3 爬取页面多个信息时的数据准确匹配问题
# 3 爬取页面多个信息时的数据准确匹配问题 # strip(“(”) 表示删除括号, strip() 表示删除空白符。 ''' 问题:我们默认书名和评分是正确的信息,如果某一项少爬或多爬了信息,匹配错误 思路:书名的标签肯定在这本书的框架内,以每本书为单位,分别取获取对应的信息,完全匹配 //*[@id=“content”]/div/div[1]/div/table[1] #整本书
//*[@id=“content”]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a #书名
//*[@id=“content”]/div/div[1]/div/table[1]/tr/td[2]/div[2]/span[2] #评分 我们发现,书名和评分 xpath 的前半部分和整本书的 xpath 一致的, 那我们可以通过这样写 xpath 的方式来定位信息: file=s.xpath(“//*[@id=“content”]/div/div[1]/div/table[1]”)
title =div.xpath(“./tr/td[2]/div[1]/a/@title”)
score=div.xpath(“./tr/td[2]/div[2]/span[2]/text()”) ''' import requests
import time
from lxml import etree url = 'https://book.douban.com/top250'
data = requests.get(url).text
s=etree.HTML(data) file=s.xpath('//*[@id="content"]/div/div[1]/div/table') for div in file:
title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]
href = div.xpath("./tr/td[2]/div[1]/a/@href")[0]
score = div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]
num = div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")")
scribe = div.xpath("./tr/td[2]/p[2]/span/text()") time.sleep(2) print("{}{}{}{}{}".format(title,href,score,num,scribe[0])) # 打印: 追风筝的人https://book.douban.com/subject/1770782/8.9327174人评价
为你,千千万万遍
解忧杂货店https://book.douban.com/subject/25862578/8.6298863人评价
一碗精心熬制的东野牌鸡汤,拒绝很难
小王子https://book.douban.com/subject/1084336/9.0252153人评价
献给长成了大人的孩子们
4 翻页
# 4翻页
'''
https://book.douban.com/top250?start=0 #第一页
https://book.douban.com/top250?start=25 #第二页
https://book.douban.com/top250?start=50 #第三页 以每页25为单位,递增25,只是 start=()的数字不一样 写一个循环 for a in range(3):
url = 'https://book.douban.com/top250?start={}'.format(a*25)
#3个页面,用 a*25 保证以25为单位递增 ''' import requests
import time
from lxml import etree for a in range(3):
url = 'https://book.douban.com/top250?start={}'.format(a*25)
data = requests.get(url).text s=etree.HTML(data)
file=s.xpath('//*[@id="content"]/div/div[1]/div/table')
time.sleep(3) for div in file:
title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]
href = div.xpath("./tr/td[2]/div[1]/a/@href")[0]
score=div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]
num=div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")").strip()
scrible=div.xpath("./tr/td[2]/p[2]/span/text()") if len(scrible) > 0:
print("{},{},{},{},{}\n".format(title,href,score,num,scrible[0]))
else:
print("{},{},{},{}\n".format(title,href,score,num)) # 打印: 追风筝的人,https://book.douban.com/subject/1770782/,8.9,327193人评价,为你,千千万万遍 解忧杂货店,https://book.douban.com/subject/25862578/,8.6,298891人评价,一碗精心熬制的东野牌鸡汤,拒绝很难 小王子,https://book.douban.com/subject/1084336/,9.0,252173人评价,献给长成了大人的孩子们
本文地址github:https://github.com/yizhiamumu/pythonSample
readme.txt
公众号:一只阿木木
博客园:http://www.cnblogs.com/yizhiamumu/
github:https://github.com/yizhiamumu/
爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP的更多相关文章
- 爬虫系列(十) 用requests和xpath爬取豆瓣电影
这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...
- 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论
这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...
- 爬虫——正则表达式爬取豆瓣电影TOP前250的中英文名
正则表达式爬取豆瓣电影TOP前250的中英文名 1.首先要实现网页的数据的爬取.新建test.py文件 test.py 1 import requests 2 3 def get_Html_text( ...
- 爬取豆瓣电影TOP 250的电影存储到mongodb中
爬取豆瓣电影TOP 250的电影存储到mongodb中 1.创建项目sp1 PS D:\scrapy> scrapy.exe startproject douban 2.创建一个爬虫 PS D: ...
- Python开发爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据
所谓静态页面是指纯粹的HTML格式的页面,这样的页面在浏览器中展示的内容都在HTML源码中. 目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/t ...
- Python爬取豆瓣电影top
Python爬取豆瓣电影top250 下面以四种方法去解析数据,前面三种以插件库来解析,第四种以正则表达式去解析. xpath pyquery beaufifulsoup re 爬取信息:名称 评分 ...
- 用python爬取豆瓣电影Top 250
首先,打开豆瓣电影Top 250,然后进行网页分析.找到它的Host和User-agent,并保存下来. 然后,我们通过翻页,查看各页面的url,发现规律: 第一页:https://movie.dou ...
- requests+lxml+xpath爬取豆瓣电影
(1)lxml解析html from lxml import etree #创建一个html对象 html=stree.HTML(text) result=etree.tostring(html,en ...
- R语言爬虫:使用R语言爬取豆瓣电影数据
豆瓣排名前25电影及评价爬取 url <-'http://movie.douban.com/top250?format=text' # 获取网页原代码,以行的形式存放在web 变量中 web & ...
随机推荐
- 最新版本汉化-PowerDesigner 16.6 汉化并河蟹
更新日志: 2019-03-14 V1.1 1.支持反复多次汉化: 2.修复少许bug. 最新的16.6版本已经在汉化中了,基本上所有的菜单均已汉化完成,部分窗体还没有编译通过. 不过,不影响尝鲜使用 ...
- docker for windows 部署gitlab
gitlab的安装相对繁琐,如果使用docker 镜像的方式就轻松太多了. 我是用的环境是windows10 专业版 + docker for windows 1.右键docker打开Kitemati ...
- AI之旅(5):正则化与牛顿方法
前置知识 导数,矩阵的逆 知识地图 正则化是通过为参数支付代价的方式,降低系统复杂度的方法.牛顿方法是一种适用于逻辑回归的求解方法,相比梯度上升法具有迭代次数少,消耗资源多的特点. 过拟合与欠 ...
- Spark 灰度发布在十万级节点上的成功实践 CI CD
原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/spark/ci_cd/ 本文所述内容基于某顶级互联网公司数万节点下 Sp ...
- Node版本管理工具-NVM的安装与使用(windows系统)
友情提示:为避免踩坑,建议浏览全文后动手操作!!! 一.nvm是什么 看到这篇文章的猿/媛们肯定不会问这个问题了,但是我还是要说,哈哈哈! 无论工作还是干嘛,就不会一直做项目,所以肯定也不会一直用一个 ...
- vue修改框架样式/deep/
/deep/ 父元素的样式名 /deep/ 要修改的样式名 使用 ... 貌似不行
- HTML5网页制作(3)
今天,就开始嵌入图片以及创建图片分区的学习吧! 这两张图片其实是我用HTML5写的(纯粹当做笔记来记了),以上就是今天要学的一些内容 下面是我今天敲的代码: [冒泡]林北的爸爸 2019/4/29 ...
- 第二次Scrum冲刺——Life in CCSU
第二次Scrum冲刺——Life in CCSU 一. 第二次Scrum任务 继续上一次冲刺的内容,这次完成论坛部分. 二. 用户故事 用户输入账号.密码: 用户点击论坛部分: 系统显示帖子: 用户选 ...
- PTA——字符串逆序
PTA 7-59 字符串逆序 #include<stdio.h> #include<string.h> #define N 81 int main() { int i; cha ...
- docker安装tomcat并部署web项目
docker安装tomcat就不说了,网上一大把 启动tomcat: docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tom ...