#使用requests库爬取猫眼电影排行榜
# encoding=utf-8
import re
import requests
import json
from requests.exceptions import RequestException
def get_open_page(url):try:# 请求头    添加user-agent用于伪装浏览器headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',}#使用localhost作为代理服务器proxies ={'http': 'http://127.0.0.1'}reponse = requests.get(url,headers=headers,timeout=3,proxies=proxies)# 设置编码 不设置可能出现乱码reponse.encoding = 'utf-8'if reponse.status_code == 200:return reponse.textreturn Noneexcept RequestException:return None
def main():# 爬取排名前100的电影for i in range(0,10):url = 'https://maoyan.com/board/4?offset=';url = url + str(i*10)html = get_open_page(url)# 使用正则表达式筛选pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?name.*?a.*?>(.*?)</a>.*?star.*?>\s+(.*?)\s+.*?</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',re.S)result = re.findall(pattern, html)dic = {}for items in result:dic = {'top:': items[0],'name:': items[1],'stars:': items[2],'releasetime:': items[3],'score':items[4]+items[5]}print (dic)
main()

补充:有关python中正则表达式的部分用法

                                                       常规的匹配规则


模式                                                                                       描述

\w                                 匹配字母、数字及下划线

\W                                匹配不是字母、数字及下划线的字符

\s                                  匹配任意空白字符,等价于[\t\n\r\f]

\S                                 匹配任意非空字符

\d                                 匹配任意数字,等价于[0-9]

\D                                匹配任意非数字的字符

\A                                匹配字符串开头

\Z                                匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串

\z                                匹配字符串结尾,如果存在换行,同时还会匹配换行符

\G                               匹配最后匹配完成的位置

\n                               匹配一个换行符

\t                                匹配一个制表符

^                                 匹配一行字符串的开头

$                                匹配一行字符串的结尾

.                                 匹配任意字符,除换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符

[...]                            用来表示一组字符,单独列出,比如[amk]匹配a、m或k

[^...]                          不在[]中的字符,比如[^abc]匹配除a、b、c以外的任意字符

*                               匹配0个或者多个表达式

+                              匹配1个或者多个表达式

?                            匹配0个或者1个前面的正则表达式定义片段,非贪婪方式

{n}                          精确匹配n个前面的表达式

{n,m}                      匹配n到m次由前面正则表达式定义的片段,贪婪方式

a|b                         匹配a或者b

()                      匹配括号内的表达式,也表示一个组

match(),向它传入要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否匹配字符串。

import re
content = 'Hello 123 4567 World_this is a Regex Demo'
print(len(content))
result = re.match('Hello\s\d\d\d\s\d{4}\s\w{10}',content)
print result
print (result.group())

findall(),搜索整个字符串,然后返回正则表达式中所有匹配的内容。

compile(),将正则字符串编译为正则表达式对象,以便后面匹配中复用。

贪婪与非贪婪

# 贪婪方式
import re
content = 'Hello 1234567 World_this is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$',content)
print(result.group(1))
# 输出的结果为7,在贪婪匹配下,.*会匹配尽可能多的字符。He后面的.*将123456匹配了,给\d+留下的只有7。所以我们需要用非贪婪方式。非贪婪方式匹配的写法为.*?
# 非贪婪方式
import re
content = 'Hello 1234567 World_this is a Regex Demo'
result = re.match('^He.*?(\d+).*?Demo$',content)
print(result.group(1))
# 输出的结果为1234567

实例:

就拿上面爬虫的正则表达式为例。

网页源代码:

<div class="content"><div class="wrapper"><div class="main"><p class="update-time">2019-01-09<span class="has-fresh-text">已更新</span></p><p class="board-content">榜单规则:将猫眼电影库中的经典影片,按照评分和评分人数从高到低综合排序取前100名,每天上午10点更新。相关数据来源于“猫眼电影库”。</p><dl class="board-wrapper"><dd><i class="board-index board-index-1">1</i><a href="/films/1203" title="霸王别姬" class="image-link" data-act="boarditem-click" data-val="{movieId:1203}"><img src="//s0.meituan.net/bs/?f=myfe/mywww:/image/loading_2.e3d934bf.png" alt="" class="poster-default" /><img data-src="https://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c" alt="霸王别姬" class="board-img" /></a><div class="board-item-main"><div class="board-item-content"><div class="movie-item-info"><p class="name"><a href="/films/1203" title="霸王别姬" data-act="boarditem-click" data-val="{movieId:1203}">霸王别姬</a></p><p class="star">主演:杨永超,宋小川,张进战</p>
<p class="releasetime">上映时间:1993-01-01</p>    </div><div class="movie-item-number score-num">
<p class="score"><i class="integer">9.</i><i class="fraction">6</i></p>        </div></div></div></dd><dd><i class="board-index board-index-2">2</i><a href="/films/1297" title="肖申克的救赎" class="image-link" data-act="boarditem-click" data-val="{movieId:1297}"><img src="//s0.meituan.net/bs/?f=myfe/mywww:/image/loading_2.e3d934bf.png" alt="" class="poster-default" /><img data-src="https://p0.meituan.net/movie/283292171619cdfd5b240c8fd093f1eb255670.jpg@160w_220h_1e_1c" alt="肖申克的救赎" class="board-img" /></a><div class="board-item-main"><div class="board-item-content"><div class="movie-item-info"><p class="name"><a href="/films/1297" title="肖申克的救赎" data-act="boarditem-click" data-val="{movieId:1297}">肖申克的救赎</a></p><p class="star">主演:乔·劳格诺,斯科特·曼,约翰·霍顿</p>
<p class="releasetime">上映时间:1994-10-14(美国)</p>    </div><div class="movie-item-number score-num">
<p class="score"><i class="integer">9.</i><i class="fraction">5</i></p>        </div></div></div></dd><dd>

正则表达式:pattern = ‘<dd>.*?board-index.*?>(.*?)</i>.*?name.*?a.*?>(.*?)</a>.*?star.*?>\s+(.*?)\s+.*?</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>’

我们所需要的内容都放在(.*?)中。

每个影片的名字,主演等信息都写在一个<dd>标签中。

所以正则表达式开头为<dd>,由<dd>到border-index之间没有我们需要的内容所以使用.*?匹配

排名前面有个标志:border-index,我们需要将其写入正则表达式中,告诉系统我们已经匹配到<i class="board-index board-index-1">1</i>处了,由于border-index后面还有一部分我们不需要的内容,所以还要使用.*?进行匹配。到>1</i>时,我们需要在正则表达式中加入>,告诉系统下面将要匹配到我们需要的内容,需要的内容用(.*? ),然后再加上</i>告诉系统我们所需要匹配的内容在</i>处结束。后面的写法与此类似,就不一一进行讲解。

通过使用pattern1=re.compile(pattern)编译为正则表达式对象,再使用re.findall(pattern1,text);(text为所需匹配的内容)findall方法会将所匹配的内容生成元组。直接输出元组就可以得到我们需要的内容。

python爬虫requests库的使用及python正则表达式的使用相关推荐

  1. 已解决(Python爬虫requests库报错 请求异常SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool

    成功解决(Python爬虫requests库报错 请求异常,SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool(host= ...

  2. 【python】python爬虫requests库详解

    1.安装:pip install requests 简介:Requests是一个优雅而简单的Python HTTP库,与之前的urllibPython的标准库相比,Requests的使用方式非常的简单 ...

  3. Python爬虫——Requests 库基本使用

    文章目录 Python爬虫--Requests 库基本使用 1.Requests简介和下载 2.Requests 库基本使用 Python爬虫--Requests 库基本使用 1.Requests简介 ...

  4. python爬虫requests库_Python爬虫(三)Requests库

    什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库.与urllib相比,Requests更加方便,可以节约 ...

  5. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  6. python爬虫requests库_python爬虫基础教程:requests库(二)代码实例

    get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...

  7. python爬虫requests库_python爬虫使用Requests库 - pytorch中文网

    在入门教程中我们介绍了urllib库和urllib2的用法,同时我们了解一些爬虫的基础以及对爬虫有了基本的了解.其实在我们生产环境中,使用Request库更加方便与实用,同时我们这需要短短的几行代码就 ...

  8. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  9. python爬虫实例教程之豆瓣电影排行榜--python爬虫requests库

    我们通过requests库进行了简单的网页采集和百度翻译的操作,这一节课我们继续进行案例的讲解–python爬虫实例教程之豆瓣电影排行榜,这次的案例与上节课案例相似,同样会涉及到JSON模块,异步加载 ...

  10. python爬虫---requests库的用法

    requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多 因为是第三方库,所以使用前需要cmd安装 pip install requests 安装完成后import一下 ...

最新文章

  1. Chimera 嵌合体
  2. 在新基建风口上,华为“鲲鹏”这次要翱翔了
  3. 五千万美元注资孵化器,ETC能实现绝地反击吗?
  4. 10款最好的免费在线工具进行网站设计与开发
  5. java web学习笔记-jsp篇
  6. 机器学习系列之手把手教你实现一个分类回归树
  7. 使用thymeleaf中超链接失效
  8. 加载svr模型_机器学习XGBoost实战,网格搜索自动调参,对比随机森林,线性回归,SVR【完整代码(含注释)+数据集见原文链接】...
  9. python飞机大战资料-Python之游戏开发-飞机大战
  10. 机器学习如何解决问题
  11. LeetCode 545. 二叉树的边界(前序+后序)*
  12. python画图库哪个好_机器学习基础5--python画图库matplotlib(上)
  13. 漫步最优化九——泰勒级数
  14. 元素属性、类名、内容、获取和设置、删除
  15. cdn搭建原理_直播平台搭建并不难,最难的是这两点
  16. Linux电源管理(2)_Generic PM之基本概念和软件架构
  17. java utility工具类怎么导入_Utility.java
  18. java三角形角度_利用java解决三角形角度问题
  19. ios 开发者论坛和资料站点
  20. Bibtex4Word无法使用IEEEtran等参考文献格式的解决方法

热门文章

  1. 小胖子日记之扯淡的生活2
  2. 15年30亿设备,安卓如何从0到最大的操作系统?
  3. 前端面试总结之长沙五
  4. 简明现代魔法 php,给PHP初学者的一些建议
  5. vue 路由跳转 外部链接
  6. dell服务器主板型号怎么看,我不懂硬件,帮我看看DELL600M的主板是什么型号
  7. 20亿人欢庆开斋节,出口企业该如何把握Q2爆单潮
  8. OpenERP 7.0入门(一):安装及开发环境部署
  9. 自然码双拼输入法的辅助码编写问题
  10. T-SQL简介及基本语法