Python爬⾍⼊门实战之猫眼电影数据抓取(实战篇)
项⽬实战
静态⽹页实战
<pre class="public-DraftStyleDefault-pre" data-offset-key="99sn9-0-0" >
<pre class="Editable-styled" data-block="true" data-editor="f0dsm" data-offset-key="99sn9-0-0" >
......
</pre>
</pre>
我们看见URL的改变规律就是参数offset值不断偏移,每页偏移的值为10,由此我们可以编写⼀个获取每页数据函数,接收参数就是页码数:
<pre class="public-DraftStyleDefault-pre" data-offset-key="b5aka-0-0" >
<pre class="Editable-styled" data-block="true" data-editor="f0dsm" data-offset-key="b5aka-0-0" >
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
偏移参数,默认为0,即为第⼀页
params = {
'offset': 0
}
def get_html(page):
'''
获取⼀页html页⾯
:param page: 页数
:return: 该页html页⾯
'''
params['offset'] = page * 10
try:
response = (url, headers=headers, params=params)
if response.status_code == 200:
html =
return html
else:
return -1
except:
return None
</pre>
</pre>
当我们获取到html页⾯后,就可以提取相应的电影信息了,⽐如榜单张每⼀项电影都会有的属性:电影名称,主演,上映时间,评分等信息。提取信息有多种⽅式,下⾯我们利⽤正则表达式提取电影信息:
<pre class="public-DraftStyleDefault-pre" data-offset-key="2m0hr-0-0" >
<pre class="Editable-styled" data-block="true" data-editor="f0dsm" data-offset-key="2m0hr-0-0" >
def parse_infor(html):
'''
提取html页⾯中的电影信息
:param html: html页⾯
:return: 电影信息列表
'''
编写正则字符串规则,提取 电影名,主演,上映时间,评分信息
pat = repile('<div class="movie-item-info">. ?<p. ?><a. ?>(. ?)</a></p>. ?<p. ?>(. ?)</p>.?<p. ?>(. ?)</p>. ?</div>. ?<div. ?>. ?<p. ?> <i. ?>(. ?)</i><i. ?>(. ?)</i></p>. ?</div>. ?</div>. ?</div>', re.S)
得到⼀个⼆重列表
results = re.findall(pat, html)
one_page_film = []
if results:
for result in results:
film_dict = {}
获取电影名信息
film_dict['name'] = result[0]
获取主演信息
start = result[1]
替换字符串中的 '\n' 字符,即换⾏字符
去掉字符串两边的空格,并使⽤切⽚去除字符串开头的'主演:'三个字符start = start.strip()[3:]
film_dict['start'] = start
获取上映时间信息
releasetime = result[2]
使⽤切⽚去除字符串开头的'上映时间:'五个字符
releasetime = releasetime[5:]
film_dict['releasetime'] = releasetime
获取评分信息,由于评分是有两个字符拼接的,这⾥我们提取后也需要进⾏拼接操作
left_half =result[3]
right_half = result[4]
score = left_half + right_half
film_dict['score'] = score
打印该电影信息:
print(film_dict)
将该电影信息字典存⼊⼀页电影列表中
one_page_film.append(film_dict)
return one_page_film
else:
return None
</pre>
</pre>
不熟悉正则读者要好好复习下前⾯的知识,虽然正则写起来可能会⿇烦些,当时他的提取效率是最⾼的,接下来我们就可以将提取好的电影信息进⾏存储操作,这⾥我们存储为CSV⽂件:
<pre class="public-DraftStyleDefault-pre" data-offset-key="7cmg0-0-0" >
<pre class="Editable-styled" data-block="true" data-editor="f0dsm" data-offset-key="7cmg0-0-0" >
def save_infor(one_page_film):
'''
存储提取好的电影信息
:param html: 电影信息列表
:return: None
'''
with open('top_film.csv', 'a', newline='') as f:
csv_file = csv.writer(f)
for one in one_page_film:
csv_file.writerow([one['name'], one['start'], one['releasetime'], one['score']])
</pre>
</pre>
以上是获取⼀页html页⾯并提取电影信息存储⾄CSV中的过程,接下来我们构造⼗页的URL便可以完成猫眼电影TOP100榜中的所有电影信息的获取和存储了,以下是完整程序:
<pre class="public-DraftStyleDefault-pre" data-offset-key="ap1fk-0-0" >
<pre class="Editable-styled" data-block="true" data-editor="f0dsm" data-offset-key="ap1fk-0-0" >
import requests
import re
import csv
import time
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
box sizingparams = {
'offset': 0
}
def get_html(page):
'''
获取⼀页html页⾯
:param page: 页数
:return: 该页html页⾯
'''
params['offset'] = page * 10
try:
response = (url, headers=headers, params=params)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论