利用爬虫利器requests爬取猫眼电影网站的流程图及基本解说

本文详细介绍使用Python和requests库爬取猫眼电影网站数据的过程,包括如何获取页面内容、解析数据并存储到CSV文件中,同时下载封面图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境

:Python3.7.1+PyCharm2018

开发内容

:使用爬虫利器requests爬取猫眼电影

爬取猫眼电影网站的流程图


在这里插入图片描述

代码:`#导包

import csv
import re

import requests
from requests import RequestException

3.页面内容获取

请求一个页面返回响应内容

url:页面网址;offset:是指页面电影开始序号

def get_one_page(url,offset):
try:
#解决浏览器兼容问题,设置消息头,伪装成浏览器的正常访问
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36’}
# 对目标网站发起请求,requests是爬虫利器
response = requests.get(url=url, headers=headers,params={“offset”:offset})
print(response)
#如果HTTP的状态码是200,表示网络请求成功,返回unicode型的html文本源码,如果是404没有找到网址路径;500:代码语法问题;303:浏览器兼容性问题;
if response.status_code==200:
return response.text
pass
#如果HTTP的状态码不是200,表示网络请求失败,返回None值
else:
return None
pass
pass
#抛出异常
except RequestException as e:
return None
pass
pass

4.页面解析

解析一个页面

def parse_one_page(html):
#正则表达式,每个影片的格子信息
pattern = ‘

.?board-index.?">(\d+).?data-src="(.?)".?/>.?movie-item-info.?title="(.?)".?star">’ +
'(.
?)

.?releasetime">(.?).?integer">(.?).?fraction">(\d+).?’
# re.S匹配多行,compile()与findall()一起使用,返回一个列表。
regex = re.compile(pattern, re.S)
items = regex.findall(html)
# 循环遍历裂变,将信息作为字典返回
for item in items:
yield {
‘index’: item[0],
‘thumb’: get_large_thumb(item[1]),
‘title’: item[2],
‘actors’: item[3].strip()[3:],
‘release_time’: get_release_time(item[4].strip()[5:]),
‘area’: get_release_area(item[4].strip()[5:]),
‘score’: item[5] + item[6]
}
pass
pass

利用正则模块获取上映时间

def get_release_time(data):
pattern = ‘^(.*?)((|$)’
regex = re.compile(pattern)
w = regex.search(data)
return w.group(1)

利用正则模块获取上映地区

def get_release_area(data):
pattern = ‘.((.))’
regex = re.compile(pattern)
w = regex.search(data)
if w is None:
return’未知’
return w.group(1)

利用正则模块获取封面大图

def get_large_thumb(url):
pattern = ‘(.?)@.?’
regex = re.compile(pattern)
w = regex.search(url)
return w.group(1)

存储数据

def store_data(item):
with open(‘movie.csv’,‘a’,newline=’’,encoding=‘utf-8’) as data_csv:
# dialect为打开csv文件的方式,默认是excel,delimiter="\t"参数指写入的时候的分隔符
try:
#写入数据
csv_writer = csv.writer(data_csv)
#保存csv文件
csv_writer.writerow([item[‘index’], item[‘thumb’], item[‘title’], item[‘actors’],item[‘release_time’],item[‘area’],item[‘score’]])
#抛出异常
except Exception as e:
#打印信息
print(e)
print(item)

下载封面图

def download_thumb(title,url):
try:
#对网站发起请求
response = requests.get(url=url)
# 获取二进制数据
with open(‘thumb/’+title+’.jpg’, ‘wb’) as f:
f.write(response.content)
f.close()
except RequestException as e:
print(e)
pass

2.主调度程序

def main():
# 起始URL
start_url=“http://maoyan.com/board/4”
#使用循环的i当做页面跳转的offset参数的变化
for i in range(0,100,10):
# 获取响应文本内容
html = get_one_page(url=start_url, offset=i)
#如果获取的html为空,打印异常信息
if html is None:
print(“链接:%s?offset=%s异常”.format(start_url,i))
continue
pass
#数据存储,下载图片
for item in parse_one_page(html=html):
store_data(item)
download_thumb(item[“title”],item[“thumb”])
pass

pass

if name == ‘main’:
#调用main函数
main()
print(“爬取完成!”)
pass

`

结果:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值