小白回顾------爬取猫眼Top100
原创
©著作权归作者所有:来自51CTO博客作者zijiangyang的原创作品,请联系作者获取转载授权,否则将追究法律责任
昨天写的一个爬虫基础课程爬取猫眼Top100,今天分享一下:
爬取猫眼Top100:
Part I:
(1):我们需要对猫眼电影的url进行分析:

由这个网页分析可以看出,猫眼电影网页的规律,每次offset后面加10就能转到下一页
所以我们就可以获取Top榜单的每一页内容
(2):接下来我们需要获取网页内容:
先导入import requests库:
这个函数可以获取url里面的内容

我们可以输出html.text检测一下
print(html.text)
这里可能会出现错误,所以我们要查看一下status_code是否为200
print(html.status_code)
如果为200说明可以进行爬取,不为200说明请求失败
所以我们一般需要取构造一个请求头,来模拟浏览器去告诉网页访问它的是浏览器而不是爬虫
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
headers里面的内容可以通过网页找到:

然后复制黏贴就行了
故: html=request.get(url,headers=headers)
获取到了网页内容
(3)现在我们就可以对网页内容进行提取,获取我们想要的内容:

这部分内容是我们想要的,虽然在这只是一篇电影的内容,但下面每一篇电影的内容格式和他如出一辙,所以我们只需要拿它做样例即可这里我们需要导入import re这个库写正则表达式进行提取

注意:.*?只是对内容进行匹配,并不进行获取(.*?)里的内容才是我们需要获取的内容
现在获取到我们想要的信息就可以进行匹配了:
代码:
def parse_one_page(html):
pattern='''<div class="board-item-main">
<div class="board-item-content">
<div class="movie-item-info">
<p class="name"><a href="/films/.*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:.*?}">.*?</a></p>
<p class="star">
(.*?)
</p>
<p class="releasetime">(.*?)</p> </div>'''
items = re.findall(pattern, html, re.S)
return items‘
这里讲解一下re.S的用法:
因为当我们获取匹配内容的时候会有’\n’(换行),而.*?只能匹配不含换行符的其他任意字符,所以我们再写多行正则表达式的时候需要加上re.S
(4)获取到匹配的内容后我们就可以写入文档了:
接下来看一些代码:
import requests
import re
def parse_one_page(html):
pattern='''<div class="board-item-main">
<div class="board-item-content">
<div class="movie-item-info">
<p class="name"><a href="/films/.*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:.*?}">.*?</a></p>
<p class="star">
(.*?)
</p>
<p class="releasetime">(.*?)</p> </div>'''
items = re.findall(pattern, html, re.S)
return items
def get_more_page_ranklist(path):
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
with open(path, 'w') as f:
for i in range (0,10):
url = 'https://maoyan.com/board/4?offset='
url=url+str(i*10)
r=requests.get(url,headers=headers,timeout=3)
data=parse_one_page(r.text)
try:
for j in range(0,len(data)):
f.write(str(str(data[j]))+'\n')
print('第' + str(i) + ' page 抓取成功')
except:
print('第'+str(i)+' page 抓取失败')
f.close()
if __name__=='__main__':
path='D:/爬虫/Top.txt'
html=get_more_page_ranklist(path)


由于本人太菜,格式无法弄的太好看,所以仍需学习,所以希望高手能多多指教共同进步