python爬虫requests库的使用及python正则表达式的使用
#使用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正则表达式的使用相关推荐
- 已解决(Python爬虫requests库报错 请求异常SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool
成功解决(Python爬虫requests库报错 请求异常,SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool(host= ...
- 【python】python爬虫requests库详解
1.安装:pip install requests 简介:Requests是一个优雅而简单的Python HTTP库,与之前的urllibPython的标准库相比,Requests的使用方式非常的简单 ...
- Python爬虫——Requests 库基本使用
文章目录 Python爬虫--Requests 库基本使用 1.Requests简介和下载 2.Requests 库基本使用 Python爬虫--Requests 库基本使用 1.Requests简介 ...
- python爬虫requests库_Python爬虫(三)Requests库
什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库.与urllib相比,Requests更加方便,可以节约 ...
- 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】
[写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...
- python爬虫requests库_python爬虫基础教程:requests库(二)代码实例
get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...
- python爬虫requests库_python爬虫使用Requests库 - pytorch中文网
在入门教程中我们介绍了urllib库和urllib2的用法,同时我们了解一些爬虫的基础以及对爬虫有了基本的了解.其实在我们生产环境中,使用Request库更加方便与实用,同时我们这需要短短的几行代码就 ...
- 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法
[写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...
- python爬虫实例教程之豆瓣电影排行榜--python爬虫requests库
我们通过requests库进行了简单的网页采集和百度翻译的操作,这一节课我们继续进行案例的讲解–python爬虫实例教程之豆瓣电影排行榜,这次的案例与上节课案例相似,同样会涉及到JSON模块,异步加载 ...
- python爬虫---requests库的用法
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多 因为是第三方库,所以使用前需要cmd安装 pip install requests 安装完成后import一下 ...
最新文章
- Chimera 嵌合体
- 在新基建风口上,华为“鲲鹏”这次要翱翔了
- 五千万美元注资孵化器,ETC能实现绝地反击吗?
- 10款最好的免费在线工具进行网站设计与开发
- java web学习笔记-jsp篇
- 机器学习系列之手把手教你实现一个分类回归树
- 使用thymeleaf中超链接失效
- 加载svr模型_机器学习XGBoost实战,网格搜索自动调参,对比随机森林,线性回归,SVR【完整代码(含注释)+数据集见原文链接】...
- python飞机大战资料-Python之游戏开发-飞机大战
- 机器学习如何解决问题
- LeetCode 545. 二叉树的边界(前序+后序)*
- python画图库哪个好_机器学习基础5--python画图库matplotlib(上)
- 漫步最优化九——泰勒级数
- 元素属性、类名、内容、获取和设置、删除
- cdn搭建原理_直播平台搭建并不难,最难的是这两点
- Linux电源管理(2)_Generic PM之基本概念和软件架构
- java utility工具类怎么导入_Utility.java
- java三角形角度_利用java解决三角形角度问题
- ios 开发者论坛和资料站点
- Bibtex4Word无法使用IEEEtran等参考文献格式的解决方法