使用Scrapy进行Python网页抓取


在这篇文章中,我们将学习如何使用Python中可用的Scrapy模块进行网页抓取技术。

什么是网页抓取?

网页抓取用于借助爬虫/扫描器从网站获取/获取数据。对于那些不提供API功能的网页,网页抓取非常方便地提取数据。在Python中,可以使用Beautiful Soup、Scrapy和lxml等各种模块进行网页抓取。

在这里,我们将讨论使用Scrapy模块进行网页抓取。

为此,我们首先需要**安装Scrapy**。

在终端或命令提示符中输入

>>> pip install Scrapy

由于**Scrapy**是一个框架,我们需要运行一个初始化命令

>>> scrapy startproject tutpts

在这里,我们创建一个**网页爬虫**来从网站提取数据。

为了构建爬虫,我们创建一个名为**tutptscraw.py**的单独脚本。在这里,我们声明一个用于提取内容的类。在这里,我们命名网页爬虫,并使用.requests从给定的URL获取数据。

使用生成器函数,它会产生获取的数据。

示例

import scrapy
class ExtractUrls(scrapy.Spider):
   name = "fetch"
   # generator Function
   def start_requests(self):
      # enter the URL
      urls = ['https://tutorialspoint.com/index.htm/', ]
      for url in urls:
      yield scrapy.Request(url = url, callback = self.parse)

这里,使用request函数获取封装在锚标记中的所有数据。由于scrapy是一个小型框架,我们在scrapy shell中运行所有功能。

要激活scrap shell,我们使用以下命令

scrapy shell https://tutorialspoint.com/index.htm/

现在,我们使用选择器(即CSS或xpath)从锚标记获取数据。

response.css('a')
links = response.css('a').extract()

为了获取网页上所有可用的链接,我们创建一个parse方法。Scrapy内部会绕过之前访问过的URL,从而减少显示结果时的渲染时间。

import scrapy
class ExtractUrls(scrapy.Spider):
   name = "fetch"
   # generator Function
   def start_requests(self):
      # enter the URL
      urls = ['https://tutorialspoint.com/index.htm/', ]
      for url in urls:
      yield scrapy.Request(url = url, callback = self.parse)
   # Parse function
   def parse(self, response):
   title = response.css('title::text').extract_first()
   # Get anchor tags
   links = response.css('a::attr(href)').extract()
   for link in links:
      yield
   {
      'title': title,
      'links': link
   }
   if 'tutorialspoint' in link:
   yield scrapy.Request(url = link, callback = self.parse)

结论

在本教程中,我们学习了如何在Python中使用Scrapy模块实现网页爬虫。

更新于:2019年9月25日

浏览量:157

启动你的职业生涯

完成课程获得认证

开始学习
广告