我做了这样的事情: # # Author: Jay Vaughan # # Pipelines for processing items returned from a scrape. # Dont forget to add pipeline to the ITEM_PIPELINES setting # See: http:doc.scrapy.orgtopicsitem-pipeline.html
你可能正在寻找关于的dont_filter=True论点Request。
我解决了这个问题,包括进入bash文件的PATH #!binbash cd myfoldercrawlers PATH=$PATH:usrlocalbin export PATH scrapy crawl my_spider_name
h1[@class='state'] 在上面的xpath中,你正在选择h1具有class属性的标签state 所以这就是为什么它选择所有进入的东西 h1 element 如果你只想选择h1标签文本,则只需 pre
我相信你正在寻找的是“持久性支持”,以暂停和恢复爬网。 要启用它,你可以执行以下操作: scrapy crawl somespider -s JOBDIR=crawlssomespider-1
如果你获取一个pdf文件,它将被存储在内存中,但是如果pdf文件的大小不足以填满你的可用内存,则可以。 你可以将PDF保存在Spider回调中: def parse_listingself, response: # ... extract pdf urls for url in pdf_urls: yield Requesturl, callback=sel
我刚刚在OS X上解决了这个问题。 请先备份你的文件。 sudo rm -rf LibraryPython2.7site-packagessix* sudo rm -rf SystemLibraryFrameworksPython.frameworkVersions2.7Extraslibpythonsix* sudo pip install six
已经准备好以json格式存储所需的所有数据。 Scrapy shell在编写蜘蛛程序之前提供了一个非常方便思想者访问网站的命令: $ scrapy shell https:www.mcdonalds.com.sglocate-us 2013-09-27 00:44:14-0400 [scrapy] INFO: Scrapy 0.16.5 started bot
bytes自己创建这些对象: item['title'] = [t.encode'utf-8' for t in title] item['link'] = [l.encode'utf-8' for l in link] item['desc'] = [d.encode'utf-8' for d in desc] items.appenditem 其中的每个
我认为没有一种好的方法可以为Scrapy创建基于Flask的API。Flask不是正确的工具,因为它不是基于事件循环的。更糟糕的是,Twisted反应堆(Scrapy使用)不能在单个线程中多次启动停止。 假设Twisted电抗器没有问题,你可以启动和停止它。它不会使事情变得更好,因为你的scrape_it函数可能会长时间阻塞,因此你将需要许多线程进程。 我认为方法是使用Twiste
你的Spider模块的名称与scrapy项目模块的名称相同,因此python尝试导入与byub.py spider相关的项目。 快速修复: 将你的Spider模块重命名为byub_org.py或类似名称。 或from __future__ import absolute_import在byub.py Spider中使用。 li
只需检查官方文档即可。我会进行一些更改,以便你可以控制Spider仅在执行此操作时运行,python myscript.py而不是每次从其导入时都运行。只需添加一个if __name__ == "__main__": import scrapy from scrapy.crawler import CrawlerProcess class MySpiders
http:doc.codingdict.comscrapyindex.html 假设启用了默认的spider中间件,则HttpErrorMiddleware会过滤掉200-300范围之外的响应代码。你可以通过在Spider上设置handle_httpstatus_list属性来告诉中间件你要处理404。 class TothegoSitemapHomesSpiderSitemapSpi
尝试这个: from geopy.geocoders import Nominatim from geopy.exc import GeocoderTimedOut my_address = '1600 Pennsylvania Avenue NW Washington, DC 20500' geolocator = Nominatim try: location = geolocator.geo
警告:此答案适用于Scrapy v0.7,自那时以来,spider管理器api发生了很大变化。 覆盖默认的SpiderManager类,从数据库或其他地方加载自定义规则,并使用自己的规则正则表达式和domain_name实例化自定义spider 在mybot settings.py中: SPIDER_MANAGER_CLASS = 'mybot.spidermanager
我在这里发布了我用来MultiCSVItemPipeline基于上述drcolossos的答案生成代码的代码。 该管道假定所有Item类均遵循* Item约定(例如TeamItem,EventItem),并创建team.csv,event.csv文件并将所有记录发送到适当的csv文件。 from scrapy.exporters import CsvItemExport
你可以简单地通过添加诸如 meta={'dont_redirect': True} 你也可以停止针对特定响应代码的重定向,例如 meta={'dont_redirect': True,"handle_httpstatus_list": [302]} 它将停止仅重定向302响应代码。 例
只需将要封装的URL包装在启动http api中。 因此,需要以下内容: scrapy shell 'http:localhost:8050render.html?url=http:domain.compage-with-javascript.htmltimeout=10wait=0.5' 这里localhost:
Scrapy以unicode而不是ascii返回字符串。要将所有字符串编码为utf-8,可以编写: vriskoit['eponimia'] = [s.encode'utf-8' for s in hxs.select'a[@itemprop="name"]text'.extract] 但我认为你会期待另一个结果。你的代码返回包含所有搜索结果的一项。要为
将您的USER_AGENT行移至settings.py文件,而不是scrapy.cfg文件中。settings.py应该与items.py使用scrapy startproject命令处于同一级别,在这种情况下,它应该类似于myprojectsettings.py
但是从1.0.0版本开始,scrapy中有一个新功能,您可以像这样覆盖每个spider的设置: class MySpiderscrapy.Spider: name = "my_spider" custom_settings = {"HTTP_PROXY":'http:127.0.0.1:8123', "DOWNLOADER_MIDDLEWARE
为什么不只使用以下内容: scrapy list|xargs -n 1 scrapy crawl
从前,我偶然发现了这个问题。如果您使用的是macOS,请转至Macintosh HD应用程序 Python3.6文件夹(或您使用的任何Python版本)双击“ Install Certificates.command”文件。
我从头开始,下面的spider应该与 scrapy crawl amazon -t csv -o Amazon.csv --loglevel=INFO 因此,使用电子表格打开CSV文件对我来说是 希望这可以帮助 : import scrapy class AmazonItemscrapy.Item: rating = s
编辑:基于具体要求(对于每个请求或之后新的IP Ñ请求),把适当的呼叫到set_new_ip在process_request中间件的方法。但是请注意,对set_new_ip函数的调用不必始终确保新的IP(存在指向FAQ的链接以及相关说明)。 EDIT2:具有ProxyMiddleware类的模块如下所示: pre
在 pipelines.py from scrapy.contrib.pipeline.images import ImagesPipeline from scrapy.http import Request from PIL import Image from cStringIO import StringIO import re class jellyImagesPipelineImagesPipelin
我使用Scrapy Extensions方法将Spider类扩展到一个名为Masterspider 的类,该类包括一个通用解析器。 下面是我的通用扩展解析器的非常“简短”的版本。请注意,一旦开始使用AJAX处理页面,就需要使用Javascript引擎(例如Selenium或BeautifulSoup)实现渲染器。还有许多其他代码来管理站点之间的差异(基于列标题的报废,处理相对URL和长URL,管理不同类型的数据容器等)。
Beautiful Soup 4有一个用于DOCTYPE声明的类,因此您可以使用它来提取顶级的所有声明(尽管您毫无疑问会期望一个或一个都不要!) def doctypesoup: items = [item for item in soup.contents if isinstanceitem, bs4.Doctype] return items[0] if items else None
在管道中尝试以下代码 import sys import MySQLdb import hashlib from scrapy.exceptions import DropItem from scrapy.http import Request class MySQLStorePipelineobject: def __init__self: self.conn = MySQLd
下面是一个在下载处理程序中间件中使用selenium和phantomjs headless webdriver的工作示例。 class JsDownloadobject: @check_spider_middleware def process_requestself, request, spider: driver = webdriver.PhantomJSexecutable_path='
该scrapy命令是python脚本,这意味着你可以从PyCharm内部启动它。 当检查scrapy二进制文件(which scrapy)时,你会注意到这实际上是一个python脚本: #!usrbinpython from scrapy.cmdline import execute execute
我所做的是: import urlparse ... def parseself, response: ... urlparse.urljoinresponse.url, extractedLink.strip ... 注意strip,因为我有时会遇到奇怪的链接,例如: a href=" MID_BRAND_NEW!%c2%a0MI
我已经更新了你的代码,这实际上是可行的: import urlparse import scrapy from scrapy.http import Request class pwc_taxscrapy.Spider: name = "pwc_tax" allowed_domains = ["www.pwc.com"] start_urls = ["http:www.pwc
确保你的每个元素formdata的类型均为字符串 Unicode frmdata = {"id": "com.supercell.boombeach", "reviewType": '0', "reviewSortOrder": '0', "pageNum":'0'} url = "https:play.google.comstoregetreviews" yield Form
spider完成后,你将需要停止反应器。你可以通过侦听spider_closed信号来完成此操作: from twisted.internet import reactor from scrapy import log, signals from scrapy.crawler import Crawler from scrapy.settings import Settings fro
在这种情况下,忘记了中间件,就可以解决问题: meta = {'dont_redirect': True,'handle_httpstatus_list': [302]} 也就是说,在产生请求时,你将需要包含meta参数: yield Requestitem['link'],meta = { 'dont_
最简单的选择是to 并且找到所有内容:extract bodytextjoin ''.joinsel.select"bodytext".extract.strip 这里sel是一个Selector实例。 另一种选择是使用nltk
不太确定命令行选项。但是,你可以这样编写spider。 class MySpiderBaseSpider: name = 'my_spider' def __init__self, *args, **kwargs: superMySpider, self.__init__*args, **kwargs self.start_urls = [
是的,这是可能的。 下面的代码在failed_urls基本Spider类中添加了一个列表,并在URL的响应状态为404时将URL附加到该列表中(需要扩展此范围以涵盖其他错误状态)。 接下来,我添加了一个将列表连接到单个字符串中的句柄,并在关闭蜘蛛时将其添加到spider的统计信息中。 根据你的评论,可以跟踪扭曲的错误,下面的一些答案提供了
在上面的代码中,FormRequest用于进行身份验证的将该after_login函数设置为其回调。这意味着该after_login函数将被调用并传递登录尝试得到的页面作为响应。 然后,通过在页面中搜索特定的字符串(在本例中为)来检查你是否成功登录"authentication failed"。如果找到,则spider结束。