赞
踩
在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息:
完整代码放到最后 ; 完整代码放到最后 ; 完整代码放到最后 ; 重要的事情说三遍。
在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息:
在开始编写爬虫之前,需要确保你的开发环境中安装了Python以及上述提到的库。可以通过以下命令安装所需的库:
pip install requests pyquery
本爬虫的主要任务是从一个给定的豆瓣电影列表页面URL中提取电影的详细信息。以下是代码的主要逻辑流程:
requests
库向豆瓣电影列表页面发送GET请求。PyQuery
解析返回的HTML文档。import requests
from pyquery import PyQuery as pq
import re
这里导入了所需的库,requests
用于网络请求,PyQuery
用于HTML解析,re
用于正则表达式匹配。
def doulist_crawler(url):
# ...
定义了一个名为doulist_crawler
的函数,它接受一个参数url
,即豆瓣电影列表的URL。
headers = {
'User-Agent': '...',
'Accept': '...'
}
设置请求头,模拟浏览器访问,避免被服务器识别为爬虫。
response = requests.get(url, headers=headers)
使用requests.get
函数发送GET请求到指定的URL,并携带之前设置的请求头。
if response.status_code == 200:
# ...
检查HTTP响应状态码,如果为200,表示请求成功,继续执行;否则打印错误信息并返回空列表。
doc = pq(response.text)
使用PyQuery
解析服务器返回的HTML内容。
doulist_item_doc = doc(".doulist-item")
doulist = []
for item in doulist_item_doc.items():
# ...
遍历页面中所有电影列表项(.doulist-item
),并对每一项进行信息提取。
item_dict = {
# ...
}
doulist.append(item_dict)
将每部电影的信息存储在一个字典中,然后将该字典添加到列表doulist
中。
最后,调用doulist_crawler
函数,并传入豆瓣电影列表页面的URL,就可以得到一个包含所有电影信息的列表。
import requests
from pyquery import PyQuery as pq
import re
def doulist_crawler(url):
'''
此函数爬取豆瓣电影列表页面,并提取列出的电影的详细信息。
该函数向指定的豆瓣电影列表URL发送GET请求,并使用预定义的头部信息来模拟浏览器请求。如果请求成功,它将使用PyQuery解析HTML内容,并提取电影的详细信息,如标题、导演、主演、类型、地区、年份、评分和评分数量。每部电影的信息存储在一个字典中,并添加到名为'doulist'的列表中。然后打印出详细信息。
提取的数据包括:
- 电影标题
- 导演
- 主演
- 类型
- 制作地区
- 发行年份
- 评分数量
- 每部电影的详细URL
参数:
url (str): 要爬取的豆瓣-豆列的电影列表页面的URL。
https://www.douban.com/doulist/240962/
返回:
list: 包含每部电影详细信息的字典组成的列表。
:return:
'''
# 定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
# 其他需要的请求头...
}
# 发送 GET 请求并获取响应内容
response = requests.get(url, headers=headers)
# 确保请求成功
if response.status_code == 200:
# 使用 PyQuery 解析网页内容
doc = pq(response.text)
doulist_item_doc = doc(".doulist-item")
doulist = []
for item in doulist_item_doc.items():
item_dict = {}
# 初始化变量
director = None
starring = None
genre = None
region = None
year = None
detail_url = item(".title a").attr("href")
title = item(".title a").text()
rating_nums = item(".rating_nums").text()
rating_count_text = item('.rating span:contains("人评价")').text()
rating_count = int(re.search(r'\d+', rating_count_text).group(0))
lines = item('div.abstract').text().split('\n')
for line in lines:
if '导演' in line:
director = line.split('导演:')[-1].strip()
elif '主演' in line:
starring = line.split('主演:')[-1].strip()
elif '类型' in line:
genre = line.split('类型:')[-1].strip()
elif '制片国家/地区' in line:
region = line.split('制片国家/地区:')[-1].strip()
elif '年份' in line:
year = line.split('年份:')[-1].strip()
item_dict['director'] = director
item_dict['starring'] = starring
item_dict['genre'] = genre
item_dict['region'] = region
item_dict['year'] = year
item_dict['detail_url'] = detail_url
item_dict['title'] = title
item_dict['rating_count'] = rating_count
doulist.append(item_dict)
return doulist # 返回电影列表
else:
print(f"请求失败,状态码:{response.status_code}")
return [] # 如果请求失败,返回空列表
if __name__ == "__main__":
move_list = doulist_crawler('https://www.douban.com/doulist/240962/')
print(move_list)
通过本教程,你应该能够理解并运行这个豆瓣电影信息爬虫。如果有任何问题,欢迎随时提问。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。