Python3:用xpath库爬取猫眼评分top100电影

在看《Python3 网络爬虫开发实战中》一书学习时,书中第三章例子用re正则匹配来爬取电影的所需数据,虽然爬取速度快,效率好,但是可能在写匹配规则时一点疏忽就会导致匹配失败提取不到所需数据,因此本次用xpath来提取内容!

  • 本次所需了解的库:

xpath库语法:http://www.w3school.com.cn/xpath/xpath_syntax.asp

tip:在不熟悉所需库的语法时,尽量先去了解库的基本语法哦!

用re爬取代码如下:

import json
import requests
from requests.exceptions import RequestException
import re
import time
#first:抓取页面
def get_one_page(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return None
#second:解析获取到的每一页源码,提取所需内容
def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)items = re.findall(pattern, html)   #正则提取for item in items:yield {'index': item[0],'image': item[1],'title': item[2],'actor': item[3].strip()[3:],'time': item[4].strip()[5:],'score': item[5] + item[6]}
#third:将数据内容保存到TXT文档
def write_to_file(content):with open('maoyanFile_top100.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')def main(offset):url = 'http://maoyan.com/board/4?offset=' + str(offset)html = get_one_page(url)for item in parse_one_page(html):print(item)write_to_file(item)if __name__ == '__main__':for i in range(10):main(offset=i * 10)     #翻页time.sleep(1)   #设置休眠时间,防止IP被封

上面代码中用re提取的匹配规则较为复杂,有点小难度。
不理解的可以了解一下re的基本规则和匹配函数:
https://blog.csdn.net/qq_42908549/article/details/86653767

  • 使用xpath 爬取

第一步:用xpath提取内容时,第一步先用谷歌仔细查看源代码,再仔细查看其中一个电影信息的源代码(如图所示):

发现每个电影对应的源代码是一个dd节点,所以我们用xpath来提取里面的一些我们需要的电影信息:
(1)找到排名所在的节点:在 i 节点上
(2)找到照片对应节点:节点a下第二个img那里
(3)找到电影名字:在第三层 div 下 p 节点下的a节点下
演员、上映时间以及具体评分的提取也是按照这样的方式仔细寻找!

提取代码如下:

#second:解析获取到的每一页源码,提取所需内容
def parse_one_page(html):selector=etree.HTML(html.text)infos = selector.xpath('//dd')for info in infos:index=info.xpath('i/text()')[0]image=info.xpath('a/img[2]/@data-src')title=info.xpath('div/div/div/p[@class="name"]/a/text()')[0]actor=info.xpath('div/div/div/p[@class="star"]/text()')[0].strip('\n').strip(' ')time=info.xpath('div/div/div/p[@class="releasetime"]/text()')[0]score=info.xpath('div/div/div/p[@class="score"]/i[@class="integer"]/text()')[0]+info.xpath('div/div/div/p[@class="score"]/i[@class="fraction"]/text()')[0]yield {'index':index,'image':image,'title':title,'actor':actor,'time' :time,'score':score}

这样就可以提取到所有我们要的电影信息啦!

第二步:将所有提取到的信息保存到文档

前面生成的数据比较杂乱,所以使用 **yield** 方法提取结果生成字典,这里通过**json**库的**dumps()**方法实现字典的序列化(具体代码看后面的整体代码)

基本过程就是这样啦,个人觉得xpath库相对于正则匹配会比较容易一些,对于和我一样的初学者上手较快,很适合小白入门。下面附上完整代码:
import json
import requests
from requests.exceptions import RequestException
from lxml import etree
import time
#first:抓取页面
def get_one_page(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return responsereturn Noneexcept RequestException:return None
#second:解析获取到的每一页源码,提取所需内容
def parse_one_page(html):selector=etree.HTML(html.text)infos = selector.xpath('//dd')for info in infos:index=info.xpath('i/text()')[0]image=info.xpath('a/img[2]/@data-src')title=info.xpath('div/div/div/p[@class="name"]/a/text()')[0]actor=info.xpath('div/div/div/p[@class="star"]/text()')[0].strip('\n').strip(' ')time=info.xpath('div/div/div/p[@class="releasetime"]/text()')[0]score=info.xpath('div/div/div/p[@class="score"]/i[@class="integer"]/text()')[0]+info.xpath('div/div/div/p[@class="score"]/i[@class="fraction"]/text()')[0]yield {'index':index,'image':image,'title':title,'actor':actor,'time' :time,'score':score}
#third:将数据内容保存到TXT文档
def write_to_file(content):with open('maoyanFile_100.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')if __name__ == '__main__':for i in range(0,10):url = 'http://maoyan.com/board/4?offset=' + str(i*10)html=get_one_page(url)parse_one_page(html)for item in parse_one_page(html):print(item)write_to_file(item)time.sleep(1)   #设置休眠时间,防止IP被封
  • 最后爬取成功截图:

这次的分享就到这里啦!有兴趣的也可以尝试用beautifulsoup库代替xpath来提取电影信息。多去尝试,肯定会有不一样的收获!代码较为简单,如有错误,欢迎及时指正!

人生苦短,我用Python!!!

Python3简单爬虫:爬取猫眼评分top100电影相关推荐

  1. Python3 简单爬虫爬取百度贴吧帖子

    使用Python3.x的版本 对http://tieba.baidu.com/p/2005436135,该百度贴吧帖子进行爬取操作. 一.使用到的库. 1.   urllib.request   :对 ...

  2. 简单爬虫——爬取Scrape|Movie网站电影排行Top10

    1.简单说明 本教程仅用来学习,不用于商业目的.这是第一次写文章,排版可能有点差,希望大家理解,嘻嘻. 不喜欢看分析的同学可以直接跳到最后有源代码 我们要爬的网站为:https://static1.s ...

  3. python爬虫阶段性总结和项目实操——爬取猫眼票房Top100

    本博客通过爬取猫眼票房Top100来简要复习一下网页的HTML获取(requests库)解析(Beautiful Soup库)和数据保存(csv库)以及总结一下爬取过程中遇到的问题和解决方法 运行结果 ...

  4. python3网络爬虫--爬取b站用户投稿视频信息(附源码)

    文章目录 一.准备工作 1.工具 二.思路 1.整体思路 2.爬虫思路 三.分析网页 1.分析数据加载方式 2.分词接口url 3.分析用户名(mid) 四.撰写爬虫 五.得到数据 六.总结 上次写了 ...

  5. Python爬虫小白教程(二)—— 爬取豆瓣评分TOP250电影

    文章目录 前言 安装bs4库 网站分析 获取页面 爬取页面 页面分析 其他页面 爬虫系列 前言 经过上篇博客Python爬虫小白教程(一)-- 静态网页抓取后我们已经知道如何抓取一个静态的页面了,现在 ...

  6. 2020-10-18 今天来说说如何爬取猫眼上的电影信息

    今天来说说如何爬取猫眼上的电影信息 最近小编试图使用requests+BeautifulSoup取去抓取猫眼上的电影信息,但尝试一番后,发现输出的电影评分.评分人数和票房都是乱码.案例见下面代码.之后 ...

  7. Python3爬虫——爬取猫眼电影排行

    一.爬取猫眼电影排行 目标:提取猫眼电影TOP100的电影排名.名称.主演.上映时间.评分.海报链接. URL:https://maoyan.com/board/4 保存:JSON # 版本:Pyth ...

  8. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  9. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

最新文章

  1. html照片4张 9张布局,css实现朋友圈照片排列布局
  2. Android开发框架afinal实践
  3. 【JavaSE02】Java基本语法-思维导图
  4. python asyncio_Python 的异步 IO:Asyncio 简介
  5. VTK:Qt之RenderWindowNoUiFile
  6. 1251 括号(递归小练)
  7. 轻量级 HTTP(s) 代理 TinyProxy
  8. 数字证书(Certificate)
  9. 购入计算机主机怎么入账,出纳记账软件更换主机电脑时如何备份附件资料?
  10. VB语言复习助力(基础篇)
  11. [附源码]Java计算机毕业设计SSM宠物领养系统
  12. python pandas 教程下载_如何用Python处理Excel?Pandas视频教程官方文档来啦~
  13. vite中antdesign-vue3的使用
  14. 软件测试之因果图分析法
  15. x5开源库后续知识点
  16. C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。
  17. memset和memset_s
  18. html海南地图插件,Echarts 地图(map)插件之 鼠标HOVER和tooltip自定义数据
  19. 关于随机数,真随机,伪随机
  20. IDM All Products全系列破解UltraEditUltraCompareUEStudioUltraFTPUltraFinder全部最新版产品破解补丁及注册机补丁破解

热门文章

  1. 华为+android+root权限获取root,华为root权限怎么开启怎么获取(简单华为手机ROOT教程)...
  2. Android Arcgis入门、Callout气泡的显示
  3. 事情永远做不完,却什么都带不走
  4. JavaScript基础之函数截流、防抖、柯理化
  5. ThinkpadT420加装上网卡
  6. java实现二维码扫码下载APP
  7. 图像特征点检测与匹配评价——量化指标
  8. Spring IOC(一):概述
  9. 易企秀 伪静态 linux,最新仿易企秀V15.1完整版开源版源码分享,修复采集功能,新增同行站模板采集功能等等...
  10. 详解如何在npmjs上上传和更新属于自己的组件库