网络爬虫-猫眼电影top100
程序员文章站
2022-04-11 18:53:55
...
接下来的一个月将更新多个网络爬虫的博文,同时也是分享自己在网络爬虫道路上的磕磕绊绊,学习和成长的历程。
今天的网络爬虫是爬取猫眼电影top100,实现分页爬取,然后保存在本地txt文本上。
url : http://maoyan.com/board/4?offset=1,通过分析和试验,发现猫眼电影的url里的offset参数代表着现实每页的第xx-xx排行,比如offset=1,则现实1-10的排行,offset=32,则显示30-39的排行,这就方便了我们实现分页爬取,只需要在url上面动一动手脚即可,正好可以使用urlencode来实现拼接。
具体实现代码如下:
import json
import re
from urllib.parse import urlencode
import requests
from bs4 import BeautifulSoup
def get_one_page(url):
# 设置user-agent为浏览器 防止被反爬虫发现后禁止登陆
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3423.2 Safari/537.36'
}
# 获取网页 'http://maoyan.com/board/4'
r = requests.get(url, headers=headers)
# print(r.text)
# 网页成功访问则返回页面内容 不成功返回空
if r.status_code == 200:
return r.text
return None
def parse_one_page(html):
soup = BeautifulSoup(html, 'lxml')
pages = soup.select('.board-wrapper dd')
# index = []
# image = []
# title = []
# actor = []
# time = []
# score = []
mylist = []
for page in pages:
# 排名
for i in page.select_one('i'):
if i.string:
mylist.append(i.string)
# 标题
for i in page.select('.name a'):
if i['title']:
mylist.append(i['title'])
# 图片地址
# 动态加载 暂时不保存
# for i in page.select('board-img'):
# if i:
# image.append(i)
# 主演
for i in page.select('.star'):
if i.string:
mylist.append(i.string.strip())
# 上映时间
for i in page.select('.releasetime'):
if i.string:
mylist.append(i.string)
f = ''
# 评分
for i in page.select('.score'):
for x in i.select('i'):
for string in x:
f += string
mylist.append(f)
# 列表换字典
c = 0
all_list = ['index', 'title', 'actor', 'time', 'score']
all_mylist = []
for x in mylist:
c += 1
all_mylist.append(x)
if c == 5:
c = 0
yield dict(zip(all_list, all_mylist))
all_mylist = []
# 写入记事本中
def write_to_file(content):
with open('result.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False) + '\n')
def main():
# 分页爬取 通过观察发现offset为每10换页
for i in range(10):
num = i * 10
base_url = 'http://maoyan.com/board/4?'
params = {'offset': num}
# urlencode 拼接网址
full_url = base_url + urlencode(params)
html = get_one_page(full_url)
# 返回为yield对象
content = parse_one_page(html)
# 写入result.txt
for x in content:
write_to_file(x)
if __name__ == '__main__':
main()
上一篇: spider - 猫眼电影top100
下一篇: 认识一下杂项设备
推荐阅读
-
【Python3爬虫】猫眼电影爬虫(破解字符集反爬)
-
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
-
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
-
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
-
【Python爬虫】猫眼电影榜单Top100
-
Python爬虫实战之Requests+正则表达式爬取猫眼电影Top100
-
Python爬虫学习==>第十章:使用Requests+正则表达式爬取猫眼电影
-
Python:爬虫实例2:爬取猫眼电影——破解字体反爬
-
python正则表达式爬取猫眼电影top100
-
Python爬虫项目--猫眼电影Top100榜