这个比较简单,直接上代码,有需要的自己研究,转载注明出处原创地址
import requests
from bs4 import BeautifulSoup
import re
class P:
def __init__(self):
self.headers = {
'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36",
} # 根据自己的电脑来设置
self.data = None
self.save_path = ""
self.timeout = None
self.res_data = ''
# 爬取网页
def askurl(self, urls):
try:
res = requests.get(urls, params=self.data, headers=self.headers, timeout=self.timeout)
except Exception:
return None
if res.status_code != 200:
return res.status_code
# 数据处理
return res
# 获得数据
def get_data(self, urls):
for i in range(10):
url = urls + str(i * 25)
info = self.askurl(url)
if not info:
print("没有获得网页")
continue
if isinstance(info, int):
print("错误", info)
continue
# 数据处理
print("获得数据成功,正在解析...")
self.jiexi(info.text)
self.save_data(self.res_data)
# 保存
def save_data(self, info):
if not info:
print("没有获得数据")
return
path = self.save_path+'TOP250.txt'
with open(path, 'w') as f:
f.write(info)
print("保存成功", path)
# 解析
def jiexi(self, html):
bs = BeautifulSoup(html, "html.parser")
res = bs.select("div> a > img")
num_ = bs.select("em")
for num, i in enumerate(res):
str_ = re.match('<img alt="([^"]*)"', str(i)).group(1)
nums = re.match('<em class="">([^"]*)<', str(num_[num])).group(1)
str_ = str(nums) + ": " + str_ + "\n"
self.res_data += str_
if __name__ == '__main__':
url = 'https://movie.douban.com/top250?start='
x = P()
x.get_data(url)
爬取后的数据1: 肖申克的救赎
2: 霸王别姬
3: 阿甘正传
4: 这个杀手不太冷
5: 泰坦尼克号
6: 美丽人生
7: 千与千寻
8: 辛德勒的名单
9: 盗梦空间
10: 忠犬八公的故事
11: 海上钢琴师
12: 楚门的世界
13: 三傻大闹宝莱坞
14: 机器人总动员
15: 放牛班的春天
16: 星际穿越
17: 大话西游之大圣娶亲
18: 熔炉
19: 疯狂动物城
20: 无间道
21: 龙猫
22: 教父
23: 当幸福来敲门
24: 怦然心动
25: 触不可及
26: 控方证人
27: 蝙蝠侠:黑暗骑士
28: 活着
…
241: 聚焦
242: 追随
243: 千钧一发
244: 我爱你
245: 一次别离
246: 黑鹰坠落
247: 网络谜踪
248: 四个春天
249: 黑客帝国2:重装上阵
250: 发条橙