目标站点分析
分析网址
首页 https://maoyan.com/
点击榜单 https://maoyan.com/board
点击Top100 https://maoyan.com/board/4
目标站点为 https://maoyan.com/board/4
https://maoyan.com 为首页
/board 为榜单标签
/4 就是下面第五个按钮Top100
这是第一页
第二页 https://maoyan.com/board/4?offset=10
第三页 https://maoyan.com/board/4?offset=20
依此类推
offset增加10就增加一页
分析网页源代码
网页榜单中每一个电影信息都在 <dd>...</dd> 之间
爬取流程框架
1. 抓取单页内容
利用requests请求目标站点,得到单个网页html代码,返回结果。
2.正则表达式
根据html代码分析得到电影的名称,主演,上映时间,评分,图片链接等信息。
3.保存至文件
通过文件的形式将结果保存,每一部电影一个结果一行字符串
4.开启循环抓取及多线程
对多页内容遍历,开启多线程提高抓取速度
代码实现
import requests
from requests.exceptions import RequestException
import re
import json
from multiprocessing import Pool
# 抓取单页内容
def get_one_page(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
# 使用正则表达式解析网页
def parse_one_page(html):
pattern = re.compile('<dd>.*?board-index.*?>(.*?)<.*?data-src="(.*?)".*?name"><a'
+'.*?title="(.*?)".*?star">(.*?) </p>.*?releasetime">(.*?)</p>'
+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
items = re.findall(pattern,html)
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]
}
# 写入并保存至文件
def write_to_file(content):
with open('maoyan_dy_top100.txt','a',encoding='utf-8') as f:
f