使用 Scrapy 框架进行多线程网页链接抓取(抓取.多线程.框架.链接.网页...)

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

使用 scrapy 框架进行多线程网页链接抓取

本文将介绍如何使用 Scrapy 框架,以更简洁高效的方式从单个 URL 中提取所有链接,包括嵌套链接。Scrapy 提供了强大的多线程支持和易于使用的 API,能够简化网络爬虫的开发过程。我们将通过一个完整的示例代码,演示如何利用 Scrapy 抓取指定网站的所有链接,并将其保存到 CSV 文件中。

Scrapy 框架简介

Scrapy 是一个强大的 Python 爬虫框架,它内置了多线程支持,并提供了许多方便的功能,例如:

  • 请求调度和处理: Scrapy 能够有效地管理请求队列,并自动处理重试、重定向等常见问题。
  • 数据提取: Scrapy 提供了强大的选择器(Selector)机制,可以方便地从 HTML 或 XML 文档中提取数据。
  • 数据存储: Scrapy 支持多种数据存储格式,例如 CSV、JSON、XML 等。
使用 Scrapy 抓取网页链接

以下是一个使用 Scrapy 抓取网页链接的示例代码:

import scrapy

class MySpider(scrapy.Spider):

    name = 'myspider'

    allowed_domains = ['www.tradeindia.com']

    start_urls = ['https://www.tradeindia.com/']

    def parse(self, response):
        print('\n>>> url:', response.url, '\n')

        links = response.css('a::attr(href)').extract()

        # create items which it will save in file `CSV`
        for url in links:
            yield {'url': url}

        # create requests with URL so it will process next pages
        for url in links:
            yield response.follow(url)

# --- run without project and save in `output.csv` ---

from scrapy.crawler import CrawlerProcess

c = CrawlerProcess({
    'USER_AGENT': 'Mozilla/5.0',
    'CONCURRENT_REQUESTS': 10,  # default: 16
    #'RANDOMIZE_DOWNLOAD_DELAY': True,  # default: True
    'DOWNLOAD_DELAY': 2,  # delays between requests to simulate real human - from `0.5*delay` to `1.5*delay`
    #'LOG_LEVEL': 'INFO',       # less information on screen
    'FEEDS': {'output.csv': {'format': 'csv'}}, # save in file CSV, JSON or XML
})

c.crawl(MySpider)
c.start()

代码解释:

  1. MySpider 类: 定义了一个名为 MySpider 的爬虫类,继承自 scrapy.Spider。

    • name:爬虫的名称,用于在 Scrapy 中标识爬虫。
    • allowed_domains:允许爬取的域名,防止爬虫爬取到其他网站。
    • start_urls:爬虫启动时要爬取的 URL 列表。
    • parse 方法:是 Scrapy 默认的回调函数,用于处理每个爬取到的页面。
  2. parse 方法:

    • response.css('a::attr(href)').extract():使用 CSS 选择器提取页面中所有 <a> 标签的 href 属性值,返回一个链接列表。
    • yield {'url': url}:将提取到的 URL 封装成一个字典,并使用 yield 关键字将其发送到 Scrapy 的数据管道(Pipeline)进行处理。 这里创建item, 之后会保存到CSV文件中
    • yield response.follow(url):创建一个新的请求,用于爬取提取到的 URL。 response.follow 会自动处理相对 URL 和绝对 URL。
  3. CrawlerProcess 类:

    PIA PIA

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

    PIA226 查看详情 PIA
    • USER_AGENT:设置 User-Agent,模拟浏览器访问,防止被网站屏蔽。
    • CONCURRENT_REQUESTS:设置并发请求数,控制爬虫的速度。
    • DOWNLOAD_DELAY:设置下载延迟,模拟真实用户行为,防止对服务器造成过大压力。
    • FEEDS:配置数据输出格式和文件名。

运行代码:

将以上代码保存为 spider.py 文件,然后在命令行中运行以下命令:

python spider.py

运行后,Scrapy 将会从 https://www.tradeindia.com/ 开始爬取,提取所有链接,并将结果保存到名为 output.csv 的文件中。

注意事项
  • 遵守 Robots.txt 协议: 在编写爬虫时,请务必遵守网站的 Robots.txt 协议,避免爬取不允许爬取的页面。
  • 设置合理的下载延迟: 为了避免对目标网站造成过大的压力,建议设置合理的下载延迟,模拟真实用户的访问行为。
  • 处理异常情况: 在爬取过程中,可能会遇到各种异常情况,例如网络错误、页面不存在等。建议在代码中添加适当的异常处理机制,保证爬虫的稳定性。
  • 动态内容抓取: 如果需要抓取 JavaScript 动态生成的内容,可以考虑使用 Scrapy 与 Selenium 或 Puppeteer 等工具结合使用。
总结

Scrapy 是一个功能强大的 Python 爬虫框架,可以帮助你快速高效地抓取网页数据。通过学习本文,你应该能够使用 Scrapy 抓取指定网站的所有链接,并将其保存到文件中。希望本文能够帮助你更好地理解和使用 Scrapy 框架。

此外,Scrapy 还提供了 LinkExtractor 和 CrawlSpider 等更高级的功能,可以进一步简化爬虫的开发。建议你查阅 Scrapy 的官方文档,了解更多关于这些功能的用法。

以上就是使用 Scrapy 框架进行多线程网页链接抓取的详细内容,更多请关注知识资源分享宝库其它相关文章!

相关标签: css javascript python java html js json 网络爬虫 浏览器 工具 ai 爬虫 Python JavaScript json css html scrapy 封装 xml 回调函数 继承 线程 多线程 并发 href 选择器 https 大家都在看: Django 模板中使用css, javascript css caption-side属性怎么用 python+pycharm+django admin css样式问题解决方案 使用BeautifulSoup高效查找HTML元素:解决注释与CSS类选择难题 非前后端分离项目中,如何用CSS伪元素有效对抗爬虫?

标签:  抓取 多线程 框架 

发表评论:

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