【爬虫】scrapy+selenium自动滚动页面爬取百度百科术语分类

本文介绍了如何结合scrapy和selenium爬取百度百科术语分类页面。面对需要滚动加载的内容,作者通过selenium模拟js执行滚动操作,包括滚动到顶部、底部和指定位置。在scrapy中实现这一功能的关键在于中间件的设置,并在适当位置加入延时以确保页面加载完成。最后,代码成功实现了自动化滚动并抓取大量数据的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看之前的贴就知道我最近对股票有点兴趣,可是我对股票一窍不通怎么办呢。发现了一个网站
https://baike.baidu.com/wikitag/taglist?tagId=62991
长这样:
在这里插入图片描述
感觉很不错,一下子基本上涵盖了大多数的相关概念,往下翻了几下,是在太多了。一个个点不知道要看到什么时候,不如写个爬虫爬下来把。
爬文字和网页很基础,直接看代码:

import scrapy
import time

class StockTermsSpider(scrapy.Spider):
	name = 'stock_term_spider'

	def start_requests(self):

		urls = [
			'https://baike.baidu.com/wikitag/taglist?tagId=62991'
		]
		headers = {
   
   
			'Referer': 'http://quote.eastmoney.com',
			'Cookie': 'BAIDUID=DF49F703A7888AE4A13F4B2D8876DFC1:FG=1; PSTM=1532004266; BIDUPSID=8DCBE11F4D26DD0AD222967F8EE139E1; BDUSS=HI5TnV6Q1d4cHB0V2F5bXhaflFaU1NRUnN0S1Z0QTMyYnVVcndTWX5CSlhicE5iQVFBQUFBJCQAAAAAAAAAAAEAAABm0OcAMDk2MDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFfha1tX4WtbR; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSFRCVID=YyDOJeC62AMTf_QwK_QLUwtTNgg3AIbTH6aoDtn3juxV0-WB7ubtEG0Pqx8g0KubKq9vogKK0eOTHkCF_2uxOjjg8UtVJeC6EG0P3J; H_BDCLCKID_SF=tJAO_KK-tIL3fP36qR70h-4shgT22-usy65R2hcH0KLKEq62blnG5UPm0tvP-b3nBDvMohjYKfb1MRjvQbO_DPI02bDjelbGJ5TaLp5TtUJaJKnTDMRh-xPLeqjyKMnitIT9-pno0hQrh459XP68bTkA5bjZKxtq3mkjbIOFfJOKHICRe5KBDM5; H_PS_PSSID=1456_21126_29238_28519_29099_28839_29220_26350; Hm_lvt_55b574651fcae74b0a9f1cf9c8d7c93a=1561451549,1562393926,1562587230,1562588395; Hm_lpvt_55b574651fcae74b0a9f1cf9c8d7c93a=1562588395; delPer=0; PSINO=1',
			'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
			'Host': 'baike.baidu.com'
		}

		for url in urls:
			print("url%s" % url)
			# meta: type:0 first request 1:next request
			yield s
<think>嗯,用户想了解ScrapySelenium的对比。首先,我需要回忆这两个工具的主要用途和特点。Scrapy是一个Python的爬虫框架,主要用于高效地抓取网页数据,适合结构化数据的提取。而Selenium是一个自动化测试工具,用于模拟浏览器操作,处理JavaScript渲染的页面。 接下来,我得考虑用户可能的场景。他们可能在做数据采集项目,需要选择适合的工具。这时候需要明确两者的区别,比如Scrapy在处理大量静态页面时的效率,而Selenium适用于需要交互的动态页面。用户可能对两者如何结合使用感兴趣,或者在不同情况下如何选择。 然后,我应该比较它们的优缺点。Scrapy的优点在于异步处理、速度快,内置支持XPath和CSS选择器,但处理动态内容需要配合其他工具。Selenium可以真实模拟用户操作,支持各种浏览器,但速度慢,资源消耗大。这些点需要分清楚,方便用户根据需求选择。 还要注意用户可能不太了解两者如何协同工作,比如在Scrapy使用Selenium处理动态内容的情况。这时候需要简单说明结合的方式,比如在Downloader Middleware中集成Selenium。 最后,总结使用场景,帮助用户做出决策。比如,静态页面Scrapy,动态页面Selenium,或者两者结合。确保回答结构清晰,分点对比,让用户容易理解。同时要避免技术术语过多,用中文简洁表达,符合用户的需求层次。</think>好的,我将从功能定位、使用场景、技术特点等方面分步骤为您对比ScrapySelenium: 1. **核心定位对比** $$ \text{Scrapy} \neq \text{Selenium} $$ - Scrapy是专业的**网络爬虫框架**,专注高效数据采集 - Selenium是**浏览器自动化工具**,主要用于Web测试和动态交互 2. **核心技术差异** | 特征 | Scrapy | Selenium | |--------------------|------------------------|----------------------| | 工作原理 | 异步网络请求 | 真实浏览器驱动 | | 执行速度 | 高速(异步并发) | 较慢(需加载完整页面)| | 资源消耗 | 低 | 高(需启动浏览器) | | JS支持 | 需配合中间件 | 原生支持 | | 典型应用 | 结构化数据采集 | 动态页面交互 | 3. **动态内容处理** $$ \text{Selenium} \supset \text{动态渲染能力} $$ - Scrapy原生无法执行JavaScript,需配合: - Splash - Scrapy-Selenium中间件 - Pyppeteer - Selenium直接通过浏览器引擎(Chrome/Firefox)完整渲染页面 4. **典型使用场景** - **优先选择Scrapy**: - 静态页面数据采集 - 大规模结构化数据抓取 - 需要分布式爬取 - 高频次数据更新监控 - **优先选择Selenium**: - 需要登录认证的网站 - 基于用户交互的动态内容(如下拉加载) - 单页应用(SPA)数据获取 - 需要截图或可视化验证的场景 5. **协同工作模式** $$ \text{Scrapy} + \text{Selenium} \rightarrow \text{混合解决方案} $$ 常见组合方式: - 在Scrapy的Downloader Middleware中集成Selenium - 用Selenium处理特定复杂请求 - 通过Selenium获取cookies后转交Scrapy 6. **学习曲线** - Scrapy需要掌握: ```python class MySpider(scrapy.Spider): def parse(self, response): yield { 'title': response.css('h1::text').get() } ``` - Selenium基础操作: ```python driver.find_element(By.ID, 'search').send_keys('keyword') driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") ``` 7. **性能对比指标** 假设采集1000个商品页: | 指标 | Scrapy | Selenium | |------------|----------|----------| | 耗时 | ~2分钟 | ~30分钟 | | 内存占用 | 200MB | 2GB+ | | CPU使用率 | 15-20% | 60-80% | **最终建议选择策略**: - 纯静态数据采集 → 单独使用Scrapy - 简单动态页面Scrapy+Splash - 复杂交互需求 → Scrapy+Selenium - 小规模动态采集 → 单独使用Selenium 是否需要针对某个具体应用场景的配置示例?我可以进一步提供典型用例的代码模板说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值