import requests
from bs4 import BeautifulSoup
#这是正在修改的方法,方法修改完成,待补充数据处理模块,先尝试获取一页的数据并处理
class DouBan:
def __init__(self):
'''
初始化方法,当创建一个类的对象的时候,该方法会被自动执行,不需要手动调用
'''
#直接组成url,但是需要拼接成间隔25的url
self.url = "https://movie.douban.com/top250?" + "?start={}&filter="
def get_urls(self,mune):
'''该方法用来构造所有的url'''
# 列表生成式
return [self.url.format(25 * i) for i in range(mune)]
def parse_url(self, url):
'''发送请求并解析数据'''
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
response = requests.get(url, headers=headers)
return response.content.decode()
def save_data(self, content, page_count):
'''保存数据'''
#print(self,content,page_count)
file_name = '豆瓣TOP250-第{}页.html'.format(page_count)
with open('./DouBan/' + file_name, 'w', encoding='utf-8') as f:
f.write(content)
def pocessdata(self,HTML):
# 处理数据使用,引入HTML文件,导出想要的数据
print(HTML)
return HTML
def run(self,mun):
'''爬虫程序启动'''
# 1. 构造url地址
request_list = self.get_urls(mun)
# 2. 在地址池中进行遍历,每遍历出一个地址就像该地址发送请求,获取响应得到的内容
for url in request_list:
# 2.1 发送请求
html_content = self.parse_url(url)
# 2.2 二次提取网页中的数据
# 2.3 直接保存网页内容到本地
#在这里解析数据处理数据
date_excel = self.pocessdata(html_content)
#在这里获取到页数,也就是目前网址在所有网址中的索引
page_count = request_list.index(url) + 1
#执行保存程序把索引和需要写入的内容写进去
self.save_data(date_excel, page_count)
if __name__ == '__main__':
# 1.创建爬虫对象
#新增在这里改变页数,你可以输入想要获取的页数
DouBan().run(1)
# 2.启动爬虫程序
#这个地方用来验证
import requests
from bs4 import BeautifulSoup
xhtml = open("豆瓣TOP250-第1页.html")
datehtml = xhtml.read()
xhtml.close()
def pocessdata(HTML):
# 处理数据使用,引入HTML文件,导出想要的数据
soup = BeautifulSoup(HTML,'html.parser')
movie_list = soup.find("span",class_="title")
for link in soup.find_all('span',class_="title"):
print(link.get_text().split())
print()
pocessdata(datehtml)