猫眼api html,Requests库+正则爬取猫眼电影Top100

声明:此篇文章主要是观看静觅教学视频后做的笔记,原教程地址:https://cuiqingcai.com/

流程框架

1.抓取单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果。

2.正则表达式分析:根据HTML代码分析得到电影的名称,主演,上映时间,评分,图片链接等信息

3.开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度

4.保存至文件:通过文件的形式将结果保存,每一部电影一个结果一行Json字符串

流程设计

1.maoyan_Spider函数是一个整体的爬虫调度器,其中包含了请求的url地址,headers请求头

def maoyan_Spider(offset):

"""

作用:猫眼电影调度器

offset:get的页码参数

"""

url = 'http://maoyan.com/board/4?offset=' + str(offset)

headers = {

'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'

}

# 获取单页html

html = get_one_page(url, headers)

# print(html)

# 将每一页的电影信息解析,并写入文件中

for item in parse_one_page(html):

# print(item)

item_str = json.dumps(item, ensure_ascii=False)

write_to_file(item_str)

2.首先以单个网页源代码进行分析,进入到猫眼电影官网榜单,通过构造请求可以拿到http://maoyan.com/board/4?的源码

def get_one_page(url, headers):

"""

作用:获取一页的源码

url:请求地址

headers:请求头

"""

try:

response = requests.get(url, headers=headers)

if response.status_code == 200:

return response.text

return None

except RequestException:

return None

3.接下来感觉整个爬虫的难点就在于解析,源码有了,这里我使用的还是正则来提取数据,稍有字符写错,可能就解析不出来了。下面以Top榜第一名为例进行解析,并转化为json格式保存

1

        

        

霸王别姬

主演:张国荣,张丰毅,巩俐

上映时间:1993-01-01(中国香港)

    

9.6

可以得出其字符串匹配规则是

'

.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?).*?releasetime">(.*?).*?integer">(.*?).*?fraction">(.*?)'

4.然后通过使用re模块findall方法找到所有电影信息,电影信息包含排名,图片地址,电影名称,主演,上映时间,评分。findall方法返回的是一个元素为元组的列表,然后遍历这些元素通过yield生成json字典形式

def parse_one_page(html):

"""

作用:解析一页的源码

html:网页源码

"""

pattern = re.compile('

.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?).*?releasetime">(.*?).*?integer">(.*?).*?fraction">(.*?)', re.S)

items = pattern.findall(html)

# print(items)

for item in items:

yield {

'index': item[0],

'image': item[1],

'title': item[2],

'actor': item[3].strip()[3:],

'time': item[4].strip()[5:],

'score': item[5]+item[6]

}

5.最后是写入文件,因为此处是对每个电影信息进行写入,所以注意写入方法用的是a,不是w。否则写入的内容只有一个电影信息,也就是Top100

def write_to_file(item):

"""

作用:往文件中写入内容

item:处理后的单个电影信息

"""

with open('result.txt', 'a', encoding='utf-8') as f:

f.write(item + '\n')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值