本文档旨在指导开发者如何使用 Scrapy 框架高效地从单个 URL 中提取所有链接,包括嵌套链接。通过 Scrapy 提供的强大功能和简洁的 API,我们可以轻松实现多线程爬取,并将提取的链接保存到 CSV 文件中。本文将提供一个可直接运行的 Scrapy 脚本,无需创建完整的 Scrapy 项目,即可快速上手。
简介网络爬虫经常需要从一个网页中提取所有的链接,并进一步访问这些链接以获取更多信息。对于大型网站,单线程爬取效率低下。Scrapy 是一个强大的 Python 爬虫框架,它内置了多线程支持,可以高效地完成链接提取任务。本教程将展示如何使用 Scrapy 提取指定 URL 及其嵌套 URL 中的所有链接,并将结果保存到 CSV 文件中。
准备工作-
安装 Scrapy:
pip install scrapy
-
安装 Twisted:
Scrapy 依赖于 Twisted 异步网络框架。某些情况下,直接 pip install scrapy 可能无法正确安装 Twisted。如果遇到问题,可以尝试手动安装 Twisted:
pip install twisted
以下是一个简单的 Scrapy 爬虫脚本,用于提取链接并保存到 CSV 文件。
import scrapy class MySpider(scrapy.Spider): name = 'myspider' allowed_domains = ['www.tradeindia.com'] # 替换为你的目标域名 start_urls = ['https://www.tradeindia.com/'] # 替换为你的起始 URL def parse(self, response): print('\n>>> url:', response.url, '\n') links = response.css('a::attr(href)').extract() # 创建 items,用于保存到 CSV 文件 for url in links: yield {'url': url} # 创建请求,用于处理下一层 URL for url in links: yield response.follow(url) # --- 无需创建项目即可运行并保存到 `output.csv` --- from scrapy.crawler import CrawlerProcess c = CrawlerProcess({ 'USER_AGENT': 'Mozilla/5.0', 'CONCURRENT_REQUESTS': 10, # 默认: 16,调整并发请求数 #'RANDOMIZE_DOWNLOAD_DELAY': True, # 默认: True 'DOWNLOAD_DELAY': 2, # 请求之间的延迟,模拟真实用户行为,避免被封禁 #'LOG_LEVEL': 'INFO', # 减少屏幕输出信息 'FEEDS': {'output.csv': {'format': 'csv'}}, # 保存为 CSV, JSON 或 XML 格式 }) c.crawl(MySpider) c.start()
代码解释:

全面的AI聚合平台,一站式访问所有顶级AI模型


-
MySpider 类: 继承自 scrapy.Spider,定义了爬虫的行为。
- name: 爬虫的名称,必须是唯一的。
- allowed_domains: 允许爬取的域名,防止爬虫爬到其他网站。
- start_urls: 爬虫启动时要爬取的 URL 列表。
-
parse(self, response): 处理响应的回调函数。
- response.url: 当前页面的 URL。
- response.css('a::attr(href)').extract(): 使用 CSS 选择器提取所有 <a> 标签的 href 属性值。
- yield {'url': url}: 生成一个包含 URL 的字典,Scrapy 会自动将其保存到 CSV 文件中。
- yield response.follow(url): 创建一个新的请求,用于爬取提取到的 URL。response.follow 会自动处理相对 URL。
-
CrawlerProcess 类: 用于运行爬虫。
- USER_AGENT: 设置 User-Agent,模拟浏览器行为,避免被识别为爬虫。
- CONCURRENT_REQUESTS: 设置并发请求数,控制爬取速度。
- DOWNLOAD_DELAY: 设置下载延迟,模拟真实用户行为,避免给服务器造成过大压力。
- FEEDS: 设置输出文件和格式。
将上述代码保存为 spider.py 文件,然后在命令行中运行:
python spider.py
爬虫将开始运行,并将提取到的链接保存到 output.csv 文件中。
注意事项- Robots.txt: 请务必遵守网站的 robots.txt 协议,避免爬取禁止爬取的页面。
- 爬取频率: 控制爬取频率,避免给服务器造成过大压力。可以使用 DOWNLOAD_DELAY 参数设置下载延迟。
- User-Agent: 设置合适的 User-Agent,模拟浏览器行为。
- 反爬机制: 一些网站可能会采取反爬机制,例如验证码、IP 封禁等。需要根据具体情况采取相应的应对措施。
- 域名限制: allowed_domains 应该设置为目标网站的域名,防止爬虫爬到其他网站。
- 递归深度: 如果网站结构非常复杂,需要控制递归深度,避免无限循环。可以使用 Scrapy 的 DEPTH_LIMIT 设置。
本教程介绍了如何使用 Scrapy 框架进行多线程网页链接提取。通过 Scrapy 提供的强大功能和简洁的 API,我们可以高效地完成爬虫任务。 请务必遵守相关法律法规和网站的 robots.txt 协议,合法合规地进行网络爬取。
以上就是使用 Scrapy 进行多线程网页链接提取教程的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: css python js json 网络爬虫 浏览器 ai 爬虫 并发请求 Python css scrapy pip 回调函数 递归 循环 继承 线程 多线程 并发 异步 href 选择器 大家都在看: 使用BeautifulSoup高效查找HTML元素:解决注释与CSS类选择难题 Selenium中Iframe内元素的XPath与CSS选择器定位策略 高效抓取Iframe内元素:Selenium与XPath/CSS选择器实践指南 解决Django静态文件404错误:CSS加载失败的配置与引用指南 解决Django中CSS等静态文件加载失败的常见问题
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。