本教程的主要目标是:
本节分为几个步骤,通过代码讲解如何实现目标功能。
确保已经安装 Feapder(以及相关依赖),执行以下命令进行安装:
pip install feapder
在代码中需要使用代理 IP 进行请求,参考爬虫代理的配置:
proxy.16yun.cn
9000
构造代理 URL 格式:
# 代理设置格式:protocol://username:password@domain:port
proxy_url = "http://16YUN:16IP@proxy.16yun.cn:9000"
同时为请求设置常用的 Cookie 和 User-Agent:
# 设置常用的User-Agent(可根据实际需要调整)
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " \
"(KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
# 示例Cookie(豆瓣等部分网站可能需要登录态,此处仅作示例)
cookies = {"bid": "example_bid_value"}
下面是完整代码示例,并附上中文注释,说明每一块功能的实现:
# 导入 Feapder 模块
import feapder
# 定义爬虫类,继承 feapder.Spider
class DoubanMovieSpider(feapder.Spider):
# 重写 start_requests 方法,构建初始请求
def start_requests(self):
# 示例:以“肖申克的救赎”为电影名称进行搜索
movie_name = "肖申克的救赎"
# 构造搜索 URL(豆瓣电影搜索接口示例,这里仅供演示,实际使用时需确认URL格式)
search_url = f"https://movie.douban.com/subject_search?search_text={movie_name}"
# 发起请求时设置代理、Cookie和User-Agent
yield feapder.Request(
url=search_url,
headers={"User-Agent": user_agent},
cookies=cookies,
# 代理IP配置(使用亿牛云爬虫代理配置)
proxy=proxy_url,
callback=self.parse_search
)
# 搜索页面的解析方法
def parse_search(self, request, response):
"""
解析搜索结果页面,提取电影详情页 URL。
这里需要根据豆瓣搜索页面的实际结构编写解析规则。
"""
# 示例:直接指定一个详情页URL(实际开发时请根据response解析电影详情页链接)
detail_url = "https://movie.douban.com/subject/1292052/" # 示例:肖申克的救赎详情页
yield feapder.Request(
url=detail_url,
headers={"User-Agent": user_agent},
cookies=cookies,
proxy=proxy_url,
callback=self.parse_detail
)
# 详情页的解析方法,提取电影详细数据
def parse_detail(self, request, response):
# 使用XPath解析电影详细信息
# 提取电影名称
movie_name = response.xpath("//span[@property='v:itemreviewed']/text()").get()
# 提取导演信息
director = response.xpath("//a[@rel='v:directedBy']/text()").get()
# 提取主演演员列表(可能有多个)
actors = response.xpath("//a[@rel='v:starring']/text()").getall()
# 提取剧情简介,注意可能带有多行或需要清理空格
synopsis_list = response.xpath("//span[@property='v:summary']/text()").getall()
synopsis = "".join(synopsis_list).strip()
# 提取电影评分
rating = response.xpath("//strong[@class='ll rating_num']/text()").get()
# 输出日志记录采集到的信息
self.logger.info(f"电影名称:{movie_name}")
self.logger.info(f"导演:{director}")
self.logger.info(f"演员:{actors}")
self.logger.info(f"剧情简介:{synopsis}")
self.logger.info(f"评分:{rating}")
# 可进一步存储数据,如保存到数据库、文件等
data = {
"电影名称": movie_name,
"导演": director,
"演员": actors,
"剧情简介": synopsis,
"评分": rating
}
# 调用Feapder内置方法进行存储(示例)
self.save_data(data)
if __name__ == "__main__":
# 定义代理和请求头等全局参数
proxy_url = "http://16YUN:16IP@proxy.16yun.cn:9000" # 亿牛云代理配置
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " \
"Chrome/95.0.4638.69 Safari/537.36"
cookies = {"bid": "example_bid_value"} # 示例Cookie
# 启动爬虫任务
DoubanMovieSpider(thread_count=1).start()
说明:undefined代码中将代理、Cookie 和 User-Agent 配置为全局变量,确保每个请求均使用相同参数。undefined为简化演示,搜索页解析中直接指定详情页 URL,实际开发时建议根据返回页面内容动态提取详情页链接。undefinedFeapder 内置数据存储方法
save_data
可根据需要自行定制存储逻辑。
douban_movie_spider.py
文件。 python douban_movie_spider.py
启动爬虫。 如果提示代理连接异常,请检查亿牛云爬虫代理账号及配置,确保代理服务正常运行。
确认目标网站对 Cookie 和 User-Agent 没有其他特殊要求,如需登录态,可能需要更新 Cookie 信息。
如果解析结果为空,检查目标页面的 HTML 结构是否发生变化,调整 XPath 规则。
网络请求超时或拒绝连接时,可适当增加请求超时时间或考虑使用重试机制。
结合豆瓣电影的分页接口,批量采集更多电影信息,并将数据存入数据库。
如果目标网站采用 JavaScript 渲染页面,可尝试结合 Selenium 或 Pyppeteer 实现动态内容采集。
利用 Feapder 的分布式特性构建分布式数据管道,实现高并发采集任务。
http://username:password@domain:port
,若格式错误将导致连接失败。 本文详细介绍了如何利用 Feapder 爬虫框架快速搭建企业级数据管道,通过配置代理 IP、Cookie 和 User-Agent,实现对豆瓣电影数据的采集。对于初学者而言,本文不仅提供了分步操作指导,还列举了常见错误和“陷阱警告”,帮助你在实际开发过程中规避常见问题。延伸练习部分也为你进一步探索提供了方向,希望你能够结合实际项目需求,不断完善和优化爬虫程序。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有