爬虫系列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 & ...
随机推荐
- Spring XML文件配置
singleton不能创建多对象(默认) <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- 《xxx系统》可用性与易用性功能增加
可用性:1. 用户删除的表单信息还可以进行恢复: 2. 用户可根据某一字段的某部分文字进行模糊查询. 3. 任何界面响应时间不超过5秒. 易用性:1. 审核人员进入系统后,提醒审核人进行密码修改 2. ...
- format() expandtabs() 输入表格数据
1 输入表格数据 format(self, *args, **kwargs): # known special case of str.format """ S.form ...
- Django JWT Token RestfulAPI用户认证
一般情况下我们Django默认的用户系统是满足不了我们的需求的,那么我们会对他做一定的扩展 创建用户项目 python manage.py startapp users 添加项目apps INSTAL ...
- Altium Designer 10如何导出SMT加工信息和BOM元件清单
要委托工厂进行SMT加工,需要向工厂提供表贴元器件的位置信息(Pick Place),这些信息可以由csv保存下来. 步骤如下: 一.设定坐标原点,一般设为板子左下角,在Keepout划线的顶点处. ...
- Github Page搜索工具更新 - 探索功能
探索功能提供了一种快速访问有意思的Github Page的途径,每周探索功能会更新有趣的搜索词条,你可以点击感兴趣的词条来获取该词条对应的Github Page. 首批Github Page探索词条包 ...
- 复杂透视表的SQL生成方法
一般而言,利用表单查看数据时,会从不同的维度来涉及透视表.比如,从产品和时间维度分析销售数据. 当需要从时间维度去分析时,同时希望能有同比,环比数据,那么将时间维度设计成列将极大方便SQL的编写. 如 ...
- python基础(七)
一.接口开发 import pymysql def my_db(sql): conn = pymysql.connect( host='118.24.3.40', user='jxz', passwo ...
- PHP全局变量,超全局变量
php中有许多超全局变量,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. 这些超全局变量是: $GLOBALS 引用全局 ...
- node.js同步读取与异步读取文件