昨天写的一个爬虫基础课程爬取猫眼Top100,今天分享一下:

爬取猫眼Top100:

Part I:

(1):我们需要对猫眼电影的url进行分析

小白回顾------爬取猫眼Top100_html


由这个网页分析可以看出,猫眼电影网页的规律,每次offset后面加10就能转到下一页

所以我们就可以获取Top榜单的每一页内容

(2):接下来我们需要获取网页内容:

先导入import requests库:

 html=request.get(url)

这个函数可以获取url里面的内容

小白回顾------爬取猫眼Top100_chrome_02


我们可以输出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里面的内容可以通过网页找到:

小白回顾------爬取猫眼Top100_html_03


然后复制黏贴就行了

故: ​​html=request.get(url,headers=headers)​​ 获取到了网页内容

(3)现在我们就可以对网页内容进行提取,获取我们想要的内容:

小白回顾------爬取猫眼Top100_网页内容_04


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

小白回顾------爬取猫眼Top100_html_05


注意:​.*?只是对内容进行匹配,并不进行获取(.*?)里的内容才是我们需要获取的内容​​ 现在获取到我们想要的信息就可以进行匹配了:

代码:

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)

小白回顾------爬取猫眼Top100_chrome_06


小白回顾------爬取猫眼Top100_html_07

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