内容

访问豆瓣电影Top250(https://movie.douban.com/top250?start=0)
获取每部电影的导演、编剧、主演、类型、上映时间、片长、评分人数以及剧情简介等信息,并将获取到的信息保存至本地文件中。

导入库

1
2
from bs4 import BeautifulSoup as BS
import requests

打开文件和设置请求头

1
2
3
4
fs = open("豆瓣.txt", 'w', encoding='utf-8')
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
}
  • fs:打开(或创建)一个名为“豆瓣.txt”的文件,用于写入数据,文件编码设置为utf-8。
  • headers:设置HTTP请求头,模拟浏览器访问,User-Agent是浏览器标识,有助于避免被网站识别为爬虫。

爬取豆瓣电影Top 250

1
2
3
for page in range(0, 250, 25):
soup = BS(requests.get(f"https://movie.douban.com/top250?start={page}&filter=", headers=headers).content.decode("utf-8"), "lxml")
content = soup.select('#content > div > div.article > ol > li > div > div.info')
  • for循环:遍历豆瓣电影Top 250的页面,每页25部电影,共10页(0到250,步长为25)。
  • requests.get:发送GET请求到豆瓣电影Top 250的URL,start={page}参数用于指定页面的起始索引。
  • BS:创建一个BeautifulSoup对象来解析请求返回的HTML内容,使用lxml作为解析器。
  • select:使用CSS选择器找到包含电影信息的HTML元素。

提取电影信息并写入文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for i in content:
# 电影
name = "电影:" + i.select('.title')[0].text
url = i.find('a')['href']
sp = BS(requests.get(url, headers=headers).content.decode("utf-8"), "lxml")
# 导演、主演、类型、上映时间
mainer = i.find('p')
mainer = mainer.text.strip()
# 编剧
writers = sp.select('#info > span')
writers = writers[1].text
# 片长
all_time = sp.select('span[property="v:runtime"]')
all_time = "时长:" + all_time[0].text
# 评分人数
number = i.find_all('span')
number = "评分人数:" + number[-2].text
# 简介
brief = sp.select('span[property="v:summary"]')
brief = "简介:" + brief[0].text
all = name + "\n" + mainer + "\n" + writers + "\n" + all_time + "\n" + number + "\n" + brief + "\n"
  • 内层for循环:遍历每页中的电影信息。
  • name:提取电影名称。
  • url:找到电影链接的href属性。
  • sp:发送请求到电影的详细页面,并创建一个BeautifulSoup对象来解析HTML。
  • mainer:提取导演、主演、类型、上映时间信息。
  • writers:提取编剧信息。
  • all_time:提取片长信息。
  • number:提取评分人数信息。
  • brief:提取电影简介。
  • all:将所有信息拼接成一个字符串。

写入文件

1
2
fs.write(all + '\n\n')
fs.close()

运行结果