请为下面代码写详细注释import random import urllib.request from bs4 import BeautifulSoup import codecs from time import sleep def main(url, headers): # 发送请求 page = urllib.request.Request(url, headers=headers) page = urllib.request.urlopen(page) contents = page.read() # 用BeautifulSoup解析网页 soup = BeautifulSoup(contents, "html.parser") infofile.write("") print('爬取豆瓣电影250: \n') for tag in soup.find_all(attrs={"class": "item"}): # 爬取序号 num = tag.find('em').get_text() print(num) infofile.write(num + "\r\n") # 电影名称 name = tag.find_all(attrs={"class": "title"}) zwname = name[0].get_text() print('[中文名称]', zwname) infofile.write("[中文名称]" + zwname + "\r\n") # 网页链接 url_movie = tag.find(attrs={"class": "hd"}).a urls = url_movie.attrs['href'] print('[网页链接]', urls) infofile.write("[网页链接]" + urls + "\r\n") # 爬取评分和评论数 info = tag.find(attrs={"class": "star"}).get_text() info = info.replace('\n', ' ') info = info.lstrip() print('[评分评论]', info) # 获取评语 info = tag.find(attrs={"class": "inq"}) if (info): # 避免没有影评调用get_text()报错 content = info.get_text() print('[影评]', content) infofile.write(u"[影评]" + content + "\r\n") print('') if __name__ == '__main__': # 存储文件 infofile = codecs.open("03-movie-bs4.txt", 'a', 'utf-8') # 消息头 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'} # 翻页 i = 0 while i < 10: print('页码', (i + 1)) num = i * 25 # 每次显示25部 URL序号按25增加 url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter=' main(url, headers) sleep(5 + random.random()) infofile.write("\r\n\r\n") i = i + 1 infofile.close()
时间: 2024-04-27 16:22:41 浏览: 91
import sys import os import urllib from bs4 import BeautifulSoup
这段代码的作用是爬取豆瓣电影 Top250 的信息并存储到文本文件中。下面是对代码的详细注释:
```python
# 导入需要的库
import random # 用于生成随机数
import urllib.request # 用于发送请求
from bs4 import BeautifulSoup # 用于解析网页
import codecs # 用于处理文件编码
from time import sleep # 用于暂停程序执行
def main(url, headers):
# 发送请求
page = urllib.request.Request(url, headers=headers)
page = urllib.request.urlopen(page)
contents = page.read()
# 用BeautifulSoup解析网页
soup = BeautifulSoup(contents, "html.parser")
# 打开文件,将豆瓣电影 Top250 的信息存储到文件中
infofile.write("")
print('爬取豆瓣电影250: \n')
# 遍历每个电影标签
for tag in soup.find_all(attrs={"class": "item"}):
# 爬取序号
num = tag.find('em').get_text()
print(num)
infofile.write(num + "\r\n")
# 爬取电影名称
name = tag.find_all(attrs={"class": "title"})
zwname = name[0].get_text()
print('[中文名称]', zwname)
infofile.write("[中文名称]" + zwname + "\r\n")
# 爬取电影网页链接
url_movie = tag.find(attrs={"class": "hd"}).a
urls = url_movie.attrs['href']
print('[网页链接]', urls)
infofile.write("[网页链接]" + urls + "\r\n")
# 爬取评分和评论数
info = tag.find(attrs={"class": "star"}).get_text()
info = info.replace('\n', ' ')
info = info.lstrip()
print('[评分评论]', info)
# 获取影评
info = tag.find(attrs={"class": "inq"})
if (info): # 避免没有影评调用get_text()报错
content = info.get_text()
print('[影评]', content)
infofile.write(u"[影评]" + content + "\r\n")
print('')
if __name__ == '__main__':
# 存储文件
infofile = codecs.open("03-movie-bs4.txt", 'a', 'utf-8')
# 消息头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
# 翻页
i = 0
while i < 10:
print('页码', (i + 1))
num = i * 25 # 每次显示25部 URL序号按25增加
url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter='
main(url, headers)
sleep(5 + random.random()) # 暂停程序执行,避免被封IP
infofile.write("\r\n\r\n")
i = i + 1
infofile.close() # 关闭文件
```
这段代码的执行过程如下:
1. 导入需要的库
2. 定义 `main()` 函数,接受两个参数 `url` 和 `headers`
3. 发送请求,获取网页内容
4. 用 `BeautifulSoup` 解析网页
5. 遍历每个电影标签,爬取电影的序号、名称、网页链接、评分、评论和影评
6. 将爬取的电影信息存储到文件中
7. 定义 `__name__` 为 `__main__` 的程序块,用于执行主程序
8. 打开文件,爬取豆瓣电影 Top250 的信息并存储到文件中
9. 翻页,重复执行步骤 3-8,直到爬取完所有电影信息
10. 关闭文件
注意:程序中使用了 `sleep` 函数暂停程序执行,避免被豆瓣封IP。
阅读全文