请详细解释以下代码并给每行代码添加注释:#导入requests库 import requests #导入beautifulsoup库 from bs4 import BeautifulSoup import codecs #目标url URL = "https://movie.douban.com/top250" #请求头 HEADERS = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'} def download_page(url): data = requests.get(url, headers=HEADERS).content return data def parse_html(html): soup = BeautifulSoup(html, 'html.parser') # 测试时可以使用print soup.prettify()打印查看获得的页面 # 根据css获取页面信息 movie_list_ol = soup.find('ol', attrs={'class':'grid_view'}) movie_name_list = [] # 遍历页面中有关的信息 for movie_li in movie_list_ol.find_all('li'): # 电影描述 detail = movie_li.find('div', attrs={'class':'hd'}) # 电影名字 movie_name = detail.find('span', attrs={'class':'title'}).getText() movie_name_list.append(movie_name) # 找到下一页 next_page = soup.find('span', attrs={'class':'next'}).find('a') if next_page: # 拼接下一页的url,继续爬取下一页 return movie_name_list, URL + next_page['href'] return movie_name_list, None def main(): url = URL with codecs.open('movies.txt', 'w', encoding='utf-8') as fp: movies_all = [] while url: html = download_page(url) movies, url = parse_html(html) movies_all.extend(movies) for index, movie in enumerate(movies_all): index += 1 # 将获得的信息写入文件 fp.write('{index}.{movie}\n'.format(index=index, movie=movie)) if __name__ == '__main__': main() print('爬取成功')
时间: 2024-04-27 20:24:53 浏览: 186
Python网页抓取及信息提取
```
#导入requests库
import requests
#导入beautifulsoup库
from bs4 import BeautifulSoup
import codecs
#目标url
URL = "https://movie.douban.com/top250"
#请求头
HEADERS = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
#定义一个函数,用于下载页面
def download_page(url):
#发送请求,获取响应内容
data = requests.get(url, headers=HEADERS).content
return data
#定义一个函数,用于解析页面
def parse_html(html):
#使用BeautifulSoup库解析HTML页面
soup = BeautifulSoup(html, 'html.parser')
#测试时可以使用print soup.prettify()打印查看获得的页面
#根据css获取页面信息
movie_list_ol = soup.find('ol', attrs={'class':'grid_view'})
movie_name_list = []
#遍历页面中有关的信息
for movie_li in movie_list_ol.find_all('li'):
#电影描述
detail = movie_li.find('div', attrs={'class':'hd'})
#电影名字
movie_name = detail.find('span', attrs={'class':'title'}).getText()
movie_name_list.append(movie_name)
#找到下一页
next_page = soup.find('span', attrs={'class':'next'}).find('a')
if next_page:
#拼接下一页的url,继续爬取下一页
return movie_name_list, URL + next_page['href']
return movie_name_list, None
#定义一个主函数,用于执行程序
def main():
url = URL
#使用codecs库打开文件
with codecs.open('movies.txt', 'w', encoding='utf-8') as fp:
movies_all = []
while url:
#下载页面
html = download_page(url)
#解析页面
movies, url = parse_html(html)
movies_all.extend(movies)
#将爬取到的电影名字写入文件
for index, movie in enumerate(movies_all):
index += 1
fp.write('{index}.{movie}\n'.format(index=index, movie=movie))
#程序入口
if __name__ == '__main__':
#执行主函数
main()
#输出爬取成功
print('爬取成功')
```
这段代码实现了从豆瓣电影Top250页面中爬取电影名字的功能,具体的实现步骤如下:
1. 导入requests库和beautifulsoup库,以及codecs库。
2. 定义目标URL和请求头。
3. 定义download_page函数,用于下载页面。
4. 定义parse_html函数,用于解析页面,获取电影名字。
5. 定义main函数,用于执行程序。在main函数中,首先使用codecs库打开一个文件,然后循环爬取Top250页面中的电影名字,将其写入文件中。
6. 在程序入口处,执行main函数,并输出“爬取成功”提示信息。
阅读全文