经常问的问题

Scrapy与BeautifulSoup或lxml相比如何?

BeautifulSoup和lxml是解析HTML和XML的库。 Scrapy是一个应用程序框架,用于编写抓取网站并从中提取数据的网络蜘蛛。

Scrapy提供了一种用于提取数据(称为选择器)的内置机制,但如果您觉得更舒服,可以轻松使用BeautifulSoup(或lxml)。毕竟,他们只是解析可以从任何Python代码导入和使用的库。

换句话说,将BeautifulSoup(或lxml)与Scrapy进行比较就像将jinja2与Django进行比较。

我可以用BeautifulSoup Scrapy吗?

是的你可以。如上所述,BeautifulSoup可用于在Scrapy回调中解析HTML响应。您只需将响应的正文加入到BeautifulSoup对象中,并从中提取所需的任何数据。

这里有一个使用BeautifulSoup API的蜘蛛示例,使用lxml作为HTML解析器:

从bs4导入BeautifulSoup

进口刮板

ExampleSpider(scrapy.Spider):

name =“example”

allowed\_domains = \[“example.com”\]

start\_urls =(

    'http://www.example.com/',

)



def解析(self,response):

    #使用lxml获得体面的HTML解析速度

    soup = BeautifulSoup(response.text,'lxml')

    产量 {

        “url”:response.url,

        “title”:soup.h1.string

    }

注意

BeautifulSoup支持多个HTML / XML解析器。请参阅BeautifulSoup的官方文档。

Scrapy支持什么Python版本?

Python 2.7和Python 3.3+支持Scrapy。 Python 2.6的支持从Scrapy 0.20开始下降。在Scrapy 1.1中添加了Python 3支持。

注意

对于Windows上的Python 3支持,建议按照安装指南中的说明使用Anaconda / Miniconda。

从Django“Scr”“X”?

可能,但我们不喜欢这个词。我们认为Django是一个很好的开源项目和一个例子,所以我们用它作为Scrapy的灵感。

我们认为,如果事情已经做好了,那就没有必要重新发明。这个概念除了是开源和自由软件的基础之外,不仅适用于软件,还适用于文档,程序,策略等。因此,我们不是自己来处理每个问题,而是从这些项目中复制想法已经妥善解决了,重点关注了我们需要解决的真正问题。

如果Scrapy作为其他项目的灵感,我们将感到自豪。随意窃取我们!

Scrapy是否与HTTP代理协同工作?

是。通过HTTP代理下载器中间件提供对HTTP代理的支持(从Scrapy 0.8开始)。请参阅HttpProxyMiddleware。

如何在不同页面中划分属性的项目?

请参阅将其他数据传递给回调函数。

Scrapy崩溃:ImportError:没有名为win32api的模块

由于这个Twisted错误,您需要安装pywin32。

如何模拟用户登录我的蜘蛛?

请参阅使用FormRequest.from_response()来模拟用户登录。

Scrapy是否以广度优先或深度优先顺序爬行?

默认情况下,Scrapy使用LIFO队列来存储挂起的请求,这基本上意味着它以DFO顺序爬行。在大多数情况下,这个顺序更方便。如果您想要以真实的BFO顺序进行爬网,则可以通过设置以下设置来进行操作:

DEPTH_PRIORITY = 1

SCHEDULER_DISK_QUEUE ='scrapy.squeues.PickleFifoDiskQueue'

SCHEDULER_MEMORY_QUEUE ='scrapy.squeues.FifoMemoryQueue'

我的Scrapy爬虫有内存泄漏。我能做什么?

请参阅调试内存泄漏。

此外,Python还有一个内置的内存泄漏问题,这个漏洞在泄漏中被描述。

如何使Scrapy消耗更少的记忆力?

看到上一个问题。

我可以在我的蜘蛛中使用基本HTTP身份验证吗?

是的,请参阅HttpAuthMiddleware。

为什么Scrapy以英语代替我的母语下载页面?

尝试通过覆盖DEFAULT_REQUEST_HEADERS设置来更改默认的Accept-Language请求头。

在哪里可以找到一些例子Scrapy项目?

参见示例。

我可以在不创建项目的情况下运行蜘蛛吗?

是。您可以使用runspider命令。例如,如果你有一个spider写在my_spider.py文件中,你可以运行它:

scrapy runspider my_spider.py

有关详细信息,请参阅runspider命令。

我收到“过滤的异地请求”消息。我该如何解决?

那些消息(用DEBUG级别记录)并不一定意味着有一个问题,所以你可能不需要修复它们。

这些消息由Offsite Spider Middleware抛出,该中间件是一个蜘蛛中间件(默认启用),其目的是过滤掉对蜘蛛覆盖的域外的请求。

欲了解更多信息,请参阅:OffsiteMiddleware。

在生产中部署Scrapy履带的推荐方法是什么?

请参阅部署蜘蛛。

我可以使用JSON进行大量出口吗?

这取决于你的输出有多大。请参阅JsonItemExporter文档中的此警告。

我可以从信号处理程序中返回(扭转)延期吗?

一些信号支持从他们的处理程序返回延期,而其他信号则不支持。看到内置的信号参考,知道哪些。

响应状态代码999是什么意思?

999是Yahoo网站用于调整请求的自定义响应状态代码。尝试使用您的蜘蛛中的2(或更高版本)的下载延迟降低爬网速度:

MySpider类(CrawlSpider):

name ='myspider'



download\_delay = 2



#\[...其余的蜘蛛代码...\]

或者通过DOWNLOAD_DELAY设置在项目中设置全局下载延迟。

我可以从我的蜘蛛调用pdb.set_trace()来调试它们吗?

是的,但您也可以使用Scrapy shell,您可以快速分析(甚至修改)蜘蛛正在处理的响应(通常比普通旧的pdb.set_trace())更有用。

有关详细信息,请参阅从蜘蛛调用shell以检查响应。

最简单的方法是将我所有的被废弃的项目转储成JSON / CSV / XML文件?

要转储到JSON文件中:

抓取抓取myspider -o items.json

要转储到CSV文件中:

刮擦爬行myspider -o items.csv

要转储到XML文件中:

scrapy crawl myspider -o items.xml

有关更多信息,请参阅Feed导出

这个巨大的隐含的__VIEWSTATE参数在某些形式中使用了什么?

__VIEWSTATE参数用于使用ASP.NET / VB.NET构建的站点。有关如何工作的更多信息,请参阅此页面。另外,这里是一个蜘蛛,其中一个这样的网站。

解析大型XML / CSV数据Feed的最佳方式是什么?

使用XPath选择器解析大型Feed可能是有问题的,因为它们需要在内存中构建整个Feed的DOM,这可能相当慢,并且消耗大量内存。

为了避免在内存中一次性解析所有的整个Feed,您可以使用scrapy.utils.iterators模块中的xmliter和csviter函数。事实上,这是饲料蜘蛛(见蜘蛛)在封面下使用的。

Scrapy是否自动管理cookies?

是的,Scrapy接收和跟踪服务器发送的Cookie,并按照任何常规的网络浏览器将其发送回后续请求。

有关更多信息,请参阅请求和响应和CookiesMiddleware。

如何查看从Scrapy发送和接收的Cookie?

启用COOKIES_DEBUG设置。

如何指示蜘蛛停止自己?

从回调中提高CloseSpider异常。欲了解更多信息,请参阅:CloseSpider。

如何防止我的Scrapy bot被禁止?

请参阅避免被禁止。

我应该使用蜘蛛参数或设置来配置我的蜘蛛吗?

蜘蛛参数和设置都可用于配置您的蜘蛛。没有严格的规则要求使用一个或另一个,但是设置更适合于一旦设置的参数变化不大,而蜘蛛参数意味着更频繁地更改,即使在每个蜘蛛运行中,有时也是所有蜘蛛都需要运行(例如,设置蜘蛛的起始网址)。

为了说明一个例子,假设你有一个蜘蛛需要登录到一个站点来刮取数据,而你只想从网站的某个部分(每次都有所不同)中删除数据。在这种情况下,登录的凭据将是设置,而要删除的部分的URL将是一个蜘蛛的参数。

我正在刮一个XML文档,我的XPath选择器不返回任何项目

您可能需要删除命名空间。请参阅删除命名空间。

results matching ""

    No results matching ""