使用 Scrapy 进行多线程网页链接提取教程(多线程.提取.链接.网页.教程...)

wufei123 发布于 2025-09-11 阅读(2)

使用 scrapy 进行多线程网页链接提取教程

本文档旨在指导开发者如何使用 Scrapy 框架高效地从单个 URL 中提取所有链接,包括嵌套链接。通过 Scrapy 提供的强大功能和简洁的 API,我们可以轻松实现多线程爬取,并将提取的链接保存到 CSV 文件中。本文将提供一个可直接运行的 Scrapy 脚本,无需创建完整的 Scrapy 项目,即可快速上手。

简介

网络爬虫经常需要从一个网页中提取所有的链接,并进一步访问这些链接以获取更多信息。对于大型网站,单线程爬取效率低下。Scrapy 是一个强大的 Python 爬虫框架,它内置了多线程支持,可以高效地完成链接提取任务。本教程将展示如何使用 Scrapy 提取指定 URL 及其嵌套 URL 中的所有链接,并将结果保存到 CSV 文件中。

准备工作
  1. 安装 Scrapy:

    pip install scrapy
  2. 安装 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()

代码解释:

PIA PIA

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

PIA226 查看详情 PIA
  • 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等静态文件加载失败的常见问题

标签:  多线程 提取 链接 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。