
本文档旨在指导开发者如何使用 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 爬虫
以下是一个简单的 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()代码解释:
新版本程序更新主要体现在:完美整合BBS论坛程序,用户只须注册一个帐号,即可全站通用!采用目前流行的Flash滚动切换广告 变换形式多样,受人喜爱!在原有提供的5种在线支付基础上增加北京云网支付!对留言本重新进行编排,加入留言验证码,后台有留言审核开关对购物系统的前台进行了一处安全更新。在原有文字友情链接基础上,增加LOGO友情链接功能强大的6种在线支付方式可选,自由切换。对新闻列表进行了调整,
-
MySpider 类: 继承自 scrapy.Spider,定义了爬虫的行为。
- name: 爬虫的名称,必须是唯一的。
- allowed_domains: 允许爬取的域名,防止爬虫爬到其他网站。
- start_urls: 爬虫启动时要爬取的 URL 列表。
-
parse(self, response): 处理响应的回调函数。
- response.url: 当前页面的 URL。
- response.css('a::attr(href)').extract(): 使用 CSS 选择器提取所有 标签的 href 属性值。
- yield {'url': url}: 生成一个包含 URL 的字典,Scrapy 会自动将其保存到 CSV 文件中。
- yield response.follow(url): 创建一个新的请求,用于爬取提取到的 URL。response.follow 会自动处理相对 URL。
-
CrawlerProcess 类: 用于运行爬虫。
运行爬虫
将上述代码保存为 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 协议,合法合规地进行网络爬取。









