对不起,如果这个问题很愚蠢,但我还找不到答案
我正在尝试准备脚本,以便使用“scrapy shell”命令从网站提取数据:
使用web浏览器输入url(例如“”),我获取要提取的数据。页面包含静态数据+动态数据
使用命令“scrapyshell”,然后发出命令(“view(response)”,我在web浏览器中看到页面的静态数据,但没有看到动态数据
我怀疑web服务器首先提供静态数据,然后在页面中填充动态数据。我想这是通过网页上的javascript来管理的
如果我的理解是正确的,那么需要
我以前提到过重用我编写的parse方法,以便根据是否在start\u url参数中传递,使我的爬行器的行为有所不同。如果是,它应该只抓取那些给定的URL(不跟随),但是如果不是,它应该抓取整个站点(跟随链接)
我得到的答案非常有用,效果也很好,并产生了如下CrawlSpider定义:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtracto
问题
我想知道如何禁用存储在scrapyd中的项目
我尝试的
我在Scrapy守护进程中部署了一个spider。部署的spider将spidered数据存储在数据库中。而且效果很好
但是,Scrapyd会记录每个刮下的刮痕。您可以在检查scrapyd时看到这一点。
此项目数据存储在…/items//.jl
我不知道如何禁用它。我在Docker容器中运行scrapyd,它占用了太多的存储空间
我已经试过了,但这似乎对我没有任何帮助。scrapyd似乎忽略了所有spider日志记录设置
编辑
我在关
我一直在试着让我的头脑清醒过来,但我没有太多的运气超越基本的东西。当我运行spider时,我会得到一个spider错误处理页面和一个尚未实现的spider豁免,但是如果我使用scrapy fetch则会输出html响应,因此不是说站点不可用。下面包括输出以及我的项目、spider和设置值
Items.py
class MycrawlerItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.F
我正试图在amazon.com上使用scrapy爬行,并试图收集列出的所有品牌的数据。
这是一个潦草的脚本:
class StayuncleCrawlerSpider(CrawlSpider):
name = 'amazon_crawler'
allowed_domains = ['amazon.com']
start_urls = ['https://www.amazon.com/gp/search/other/ref=sr_in_a_V?rh=i%3Aelectr
我已经创建了spider,以便根据我的要求从internet上抓取页面,但过了一段时间后,他们将身份验证机制更改为SSO
scrapy可以从SSO认证网站下载内容吗?应该可以,但scrapy没有神奇之处,你必须按照常规路线:
我正在尝试爬网这个gem网站:
发生了一些奇怪的事情,我不知道如何获取某些元素,如下一步按钮中的href
比如说,
response.xpath('//section')生成:
[<Selector xpath='//section' data='<section class="specimen-details">\n\t<...'>,
<Selector xpath='//section' data='<section clas
scrapy crawl在我的项目中运行良好
在冒烟测试中,我抓取一个私有页面,并断言这些项目与预期一致
在我完成一个严肃的项目重构之前,一切都很顺利,对于冒烟测试,最终在setUp()中设置了一个env var,它实际上设置了os.environ['SCRAPY\u SETTINGS\u MODULE']='.SETTINGS'
设置此环境变量后,scrapy crawl抱怨'ImportError:No module named.settings'
scrapy.cfg设置正确,除此烟雾测试
我希望我的爬行器忽略任何具有查询字符串的URL。我曾尝试在LinkedExtractor(见下文)中的拒绝规则(用于\?)中添加一个表达式,但它被忽略了。我的爬行器仍在爬行/提取包含?字符的URL
我只有一个起始URL,它是我的域的根,所以抓取链接的唯一方法是通过LinkExtractor
这是爬行蜘蛛实现中的唯一规则
Rule(LinkExtractor(
allow=(),
deny=(':443', ':80', '\?', )),
我正在尝试使用srapy shell中的以下命令从页面标记中提取文本:
[w.strip() for w in response.xpath('//ul[@class="attribute-list"]/li/dl/dd/text()').extract()]
dd标记如下所示:
<dd> Edelstahl <br>gebürstet (silberfarben) </dd>
现在重要的是,我要么只得到第一个元素“Edelstahl”,要么同时得到两个复
如何在浏览器中突出显示整个页面,即不显示页面源代码,在记事本中复制/粘贴,即不显示超链接,只显示文本
我想要的是人类阅读的文本,而不是答案中的页面来源:
原因:
我将获得文本表示,以及页面url,并在elasticsearch中为其编制索引,使其成为站点搜索解决方案。我不希望在索引时出现凌乱的html/js代码。模块html2text可以在删除标记时将html转换为纯文本:
import html2text
converter = html2text.HTML2Text()
bodyText
当我在刮东西的时候,我看到屏幕上有scrapy正在拉的所有东西的输出。有没有办法不显示此信息,而只显示爬行器正在运行的某种状态?我想你指的是日志,可能它设置为默认的DEBUG,所以要显示重要的碎片信息,我想你应该将其设置为INFO,只需转到settings.py并添加:
LOG_LEVEL = 'INFO'
我正在尝试刮取一个被重定向的页面,我尝试设置一个用户代理,但它也不起作用
我在另一个问题中看到了这一点:
meta = {'dont_redirect': True,'handle_httpstatus_list': [302]}
如何在scrapy shell中测试它?当使用scrapy shell时,最简单的方法可能是在命令行上使用REDIRECT\u ENABLED=0设置禁用RedirectMiddleware
比较这一点,完全禁用重定向:
$ scrapy shell -s REDI
我试图抓取一些数据作为我的辅助项目,但在收集数据时遇到了问题。我已经试了两天,运气不好
第一个问题:
当我从主页抓取帖子时,我得到了一个错误的标记
第二个问题:
我已经阅读并尝试实现获取电话号码,但徒劳无功,
还是这个答案
第三个问题:
如何实现下一页(注释掉gumtree.py中的代码)
第四个问题:
我现在可以获得电话号码,但我收到了对同一url的重复请求,请求的值不同,[参见结果]
如果有人能给我指点方向,我将不胜感激。
我的主要目标是抓取有电话号码的帖子
我试图搜索stackoverf
所以我正在尝试编写可以从所有scrapy Spider调用的函数。
在我的项目中是否有一个地方可以定义这些函数,或者需要在每个spider中导入它们
谢谢你不能在python中隐式导入代码(至少在没有破解的情况下),毕竟显式比隐式好——所以这不是一个好主意
然而,在scrapy中,使用具有通用函数和方法的基本Spider类是非常常见的
假设您有以下树:
├── myproject
│ ├── __init__.py
│ ├── spiders
│ │ ├── __init__.p
我正在创建CSV文件,并通过Gmail SMTP以附件形式发送电子邮件
下面是Scrapy 1.5.1中的相关代码
mailer = MailSender(smtphost='smtp.gmail.com',
mailfrom='noreply@domain.io',
smtpuser='email@gmail.com',
smtppass='PASS', smtpport=587)
att
Scrapy从settings.py中选择设置(也有默认设置、项目设置和每蜘蛛设置)。我正在寻找的是能够有多个带有设置的文件,并且能够在快速启动爬行器时在它们之间切换。如果文件之间有一些继承,那也太棒了
如果您从Java世界了解Spring Boot,那么就有了配置文件的概念。您有application.settings文件和基本设置。然后您可以有application-dev.settings和application-prod.settings。如果您使用选项-Dspring.profiles
我对ScrapydAPI有意见
我写了一个简单的spider,它获取域url作为参数
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'quotes'
def __init__(self, domains=None):
self.allowed_domains = [domains]
self.start_urls = ['http://{}/'.format(domains)]
当我使用scrapy编写带有scrapy redis的分布式爬虫程序时,我只将请求队列存储在redis中,没有存储重复数据消除指纹队列
# Spider code
import scrapy
from datetime import datetime
from machinedigikey.items import Detail_Item
from scrapy_redis.spiders import RedisSpider
class DgkUpdateDetailSpider(Redis
如何提取不同div类下的数据?我只能使用span.field-content获得它,但不能使用div
<div class="view-content">
<div class="views-row views-row-1 views-row-odd views-row-first">
<div class="views-field views-field-acronym">
<span class="field-content"
所以我试图学习scrapy,对于学习项目,我想刮取这个网站的项目名称(仅从1个类别atm),然后输入这些项目URL并抓取描述文本
我已经得到一些关于编写2个spider的建议,但我不知道如何从parse方法中的变量中从第一个spider获取数据到第二个spider以填充start\u URL
这就是我所处的位置:
import scrapy
class Names(scrapy.Spider):
name = 'killernames'
start_urls = ['ht
我有点纠结于如何准确地返回scrapy spider的输出,以便在另一个函数或全局范围内使用它。在下面的代码中,我尝试返回res变量,就像您通常对函数所做的那样,但对于Scrapy,它似乎不起作用,而是为列表中的每个URL返回以下错误:返回请求、项或无,获得'str'
谢谢你花时间来研究这件事
import scrapy
from scrapy.crawler import CrawlerProcess
import logging
#disable logging for scrapy -
scrapy doc说:
Scrapy附带了一个名为“Scrapyd”的内置服务,它允许您使用JSON web服务部署(aka.upload)您的项目并控制它们的爬行器
使用scrapyd是否有一些优势?scrapyd允许您在不同的机器上运行scrapy,而不是通过一个方便的web API使用的机器,这意味着您可以使用curl甚至web浏览器上传新的项目版本并运行它们。否则,如果您想在云中某处运行Scrapy,您必须scp复制新的spider代码,然后使用ssh登录并生成Scrapy crawl
我正在使用scrapy来提取部分地址,我需要帮助了解地址的语法。下面是代码(如果这是无效代码,请道歉,不知道如何正确粘贴到问题中)
行item['address1']=site.select('strong[text()=“Physical Address”]/“following sibling::text()[1]”)返回字符串值[]。最后几个字符被剪裁
当我添加.extract()时,cmd中的值显示为[u'\n\t\t\t 123 address street,someplace,som
我想知道在scrapy运行时发生了什么,如何监控状态?有两种方法。第一种方法,这里是一个来自官方文件的示例
telnet localhost 6023
>>> est()
Execution engine status
time()-engine.start_time : 8.62972998619
engine.has_capacity() : False
len(engine.downloader.active) : 16
engine.sc
我正在编写一个项目管道,它使用Pika将项目拖放到RabbitMQ队列。目前我使用的是阻塞/同步方法,这显然不是一个好主意。我想使用类似于的异步方法,但我不知道如何向已经运行的反应器添加延迟任务。例如,pika连接的twisted版本的示例代码如下所示:
d = cc.connectTCP('hostname', 5672)
d.addCallback(lambda protocol: protocol.ready)
d.addCallback(run)
reactor.run() # Prob
我尝试构建splash的代理设置。在这里,我将Tor或Polipo端口地址分配给set\u proxy,但它不起作用。我得到504个错误:
function main(splash)
local host = "localhost"
local port = 8123
--local type = "SOCKS5"
splash:on_request(function (request)
我不想对已经使用httpcache中间件缓存的页面使用crawlera代理服务(因为我对每月的调用次数有限制)
我正在使用crawlera中间件,并通过以下方式启用它:
DOWNLOADER_MIDDLEWARES = {
'scrapy_crawlera.CrawleraMiddleware': 610}
按照文档中的建议()
不过,爬网结束后,我得到:
2017-04-23 00:14:24 [scrapy.statscollectors] INFO: Dumping Scrapy
我找不到任何使用带规则的start_请求的解决方案,也没有在互联网上看到任何这两个请求的例子。我的目的很简单,我想重新定义start_请求函数,以便能够捕获所有请求中的异常,并在请求中使用meta。这是我的蜘蛛的代码:
类TestSpider(爬行蜘蛛):
名称='test'
允许的_域=['www.oreilly.com']
开始\u URL=['']
这段代码只刮一页。我尝试修改它,而不是:
def parse_item(self, response):
item = {}
在粗糙的外壳上执行
url = "https://www.daraz.com.np/smartphones/?spm=a2a0e.11779170.cate_1.1.287d2d2b2cP9ar"
fetch(url)
r = scrapy.Request(url = url)
fetch(r)
response.xpath("//div[@class='ant-col-20 ant-col-push-4 c1z9Ut']/div[@class='c1_t2i']/
我试图在AWS上设置一个scrapyd服务器,并试图从本地计算机访问它。到目前为止,我设法在远程机器上运行scrapyd
我知道它正在运行,因为当我执行start scrapyd时,我得到start:Job已经在运行:scrapyd
我需要做什么才能从本地计算机访问它?您可以使用ssh端口转发:
ssh scrapyd.host.com -L 6800:localhost:6800
然后从本地计算机访问scrapyd at
我正在使用以下管道将我的项目导出到CSV(使用Scrapy 0.17):
但是,当我使用此管道时,会出现以下错误:
异常。AttributeError:'CsvExportPipeline'对象没有属性'exporter'
请说明我缺少什么?找到了解决方案。问题是在命名文件时使用self.name。它应该是spider.name
嗯,这个错误信息只是误导,占用了几个小时
from scrapy import signals
from scrapy.contrib.exporter import
我是个新手,但我已经成功地创造了一只相当复杂的蜘蛛。现在我想在同一个项目中再添加一些。我试图复制我的工作爬行器并编辑它以与另一个目标一起工作,但我得到了各种各样的全局变量错误。我曾经尝试过“我的新蜘蛛”但似乎所有的蜘蛛都被启动了。有什么好处?是否应该在现有的spider中添加一个新类?这似乎不可扩展。。。任何指点都将不胜感激。医生让我走得很远,但我现在绊倒了
非常感谢 我从你的问题中了解到,添加更多spider的最佳方法是在spider文件夹下的新文件中添加新类,
尝试为每个蜘蛛分别命名。使用此
我正在通过scrapy爬行一个网站。在一系列请求之后,爬行器停止,这意味着没有分页。当我在浏览器中打开同一页时,它显示为“请关闭浏览器并重试”或返回主页并重试,但当我在“资源”选项卡中检查元素并清除Cookie时,我可以再次查看该页
我现在如何用我的蜘蛛清理饼干????我已将下载延迟添加为4,但仍然看到相同的问题请尝试禁用settings.py文件中的cookie。设置:
COOKIES_ENABLED = False
你可以发布起始url吗?@Jithin你应该粘贴蜘蛛代码。否则,reque
我是个新手,希望能得到一些帮助,或者只是朝着正确的方向努力。我目前尝试使用scrapy,但根本无法让它工作。
我想做的是从中获得标题、插曲和HTML5视频播放器链接的+不同质量(480p、720p等)。我不确定我是如何从iframe元素中获取视频src的
如前所述,任何帮助都将非常有用
我不曾有过Scrapy的经验,但我自己正处在一个Python网络擦伤项目的中间。我用BeautifulSoup刮
我已经编写了部分代码-这将获取所有的标题、剧集、缩略图,并将链接加载到新页面进行进一步处理。如果您
我已经在我的Mac上安装并运行了scrapyd,但我想重新启动或终止它-我认为这可能是通过pip安装后无法让scrapyd客户端正常工作的一个原因
我找不到杀死或重新启动它的方法。我通过pip安装并运行以下命令来启动它:
scrapyd
有什么想法吗?
killall scrapyd
这将杀死Scrapyd,因此所有正在运行的作业也将被杀死。Do
killall scrapyd
这将杀死Scrapyd,因此所有正在运行的作业也将被杀死。请参阅
我是scrapy的新用户,可以抓取我的网站。我想将抓取的数据存储到mysql数据库中。
myspider.py:
对于pipelines.py,我修改并使用了googldir的示例。因此,当我运行crawl时,会出现以下错误:
exceptions.AttributeError:“MininovaSpider”对象没有属性“iterkeys”
exceptions.TypeError:“MininovaSpider”对象不可下标
pipeline.py:
from scrapy import l
我正在从一堆页面的标题标签中删除文本,但还希望在我的项目中包含我的起始URL作为字段。有人知道我是怎么做到的吗?当我将数据导出到CSV时,我希望看到标题旁边的开始URL
这是我的蜘蛛的密码---
您可以这样做:
item['start_url'] = response.url
item['start_url'] = response.url
当试图废弃一个传递页眉和正文的页面时,我得到如下错误显示
我尝试转换为json、str并发送它,但没有给出任何结果。
如果需要更改,请告诉我
代码
import scrapy
class TestingSpider(scrapy.Spider):
name = "test"
def start_requests(self):
request_headers = {
"Host": "host_here",
"Use
我在网站上做了一个官方的视频课程授权。
如果用户名和密码不正确,则转换到回调方法是成功的;如果登录名和密码正确,则转换到回调方法是不可行的。
我的代码:
进口羊瘙痒
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ["https://www.darkorbit.com"]
def parse(self, response):
login_url = response.css(
我正在努力为蓬塔卡纳的所有酒店搜集评论。代码似乎在运行,但当我调用crawl时,它实际上不会对任何站点进行爬网。下面是我的文件结构,我调用了什么,以及运行它时发生了什么
文件夹结构:
├── scrapy.cfg
└── tripadvisor_reviews
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-37.pyc
│ ├── items.cpython-37.pyc
│ └─
我有一个相当简单的爬行器,它从文件(工作)加载URL,然后开始爬行并归档HTML响应
它以前工作得很好,从几天以来,我再也弄不清楚我做了什么改变使它停止工作。
现在,爬行器仅爬行每个URL的第一页,然后停止:
'finish\u reason':'finished',
蜘蛛网:
class TesterSpider(爬行蜘蛛):
名称='tester'
允许的_域=[]
规则=(
规则(LinkExtractor(allow=(),deny=(r'.*Zahlung.*,r'.*Cookies.
我最近在学刮痧。我尝试使用它最简单的方式获取响应体,但得到了一个空字符串
这是我的密码:
>>> from scrapy.http import Response
>>> r = Response('http://zenofpython.blog.163.com/blog/static/23531705420146124552782')
>>> r.body
''
>>> r.headers
{}
>>>
我怎么刮这个?如何使用有效负载发送post请求并从中获取数据
如果我使用这段代码,我可以刮取第一页,但我如何刮取第二页?我需要用硒吗?还是说我的皮肤够痒
import scrapy
from scrapy import log
from scrapy.http import *
import urllib2
class myntra_spider(scrapy.Spider):
name="myntra"
allowed_domain=[]
start_urls=["ht
我有来自同一个域(存储在MongoDB中)的数千个URL,需要使用scrapy进行爬网。问题是,蜘蛛爬行第一个URL,完成,然后拾取第二个URL。我怎样才能让它一次抓取多个URL,所有URL都被并行地、独立地抓取
我总是可以多次运行命令scrapy crawl,但我正在寻找一种更复杂的解决方案
欢迎实验想法 您可以在爬行器的start\u url参数中加载Mongo中的所有URL。然后,Scrapy将从该列表中选择URL并同时开始处理它们。您可以在Spider的start\u URL参数中加载M
我是新手。我目前正在尝试扩展我的爬行爬行器,以便它可以从文本文档中接收多个参数(而不是像scrapy crawl crawl5-a start\u url=“argument”那样手动将每个参数输入命令行)。目前,我可以输入一个参数并生成几个项目。但我想就两个问题提供一些指导:
如何为每个参数创建一个项
如何将该项用作从每个参数生成的项的容器
我在这里的目标是模拟多次运行爬行器,同时将每个参数返回的项分开
编辑。。这是我的代码——正如你所看到的,它是thesaurus.com的刮刀
import
标签: Scrapy
splash-screenscrapy-splash
我已将scrapy splash集成到我的CrawlerSpider进程请求中,规则如下:
def process_request(self,request):
request.meta['splash']={
'args': {
# set rendering arguments here
'html': 1,
}
}
return request
问题是爬网只在第一个深度呈现URL,
标签: Scrapy
torscrapy-splashsplash-js-renderpolipo
我已使用以下链接成功运行了Scrapy与Tor:
但我不能和托尔一起跑
在Scrapy-settings.py中,我将http_代理定向到polipo(8123是polipo端口):
在polipo.config中,我指向tor(9150是tor端口):
这对刮痧很有效。在splash中,它不起作用。但我不得不说,splash或docker使用polipo作为http_代理,就像在scrapy-settings.py中一样。Docker应该以某种方式使用polipo,polipo将指向tor。我
标签: Scrapy
python-requestshttpresponse
我正在尝试清理一个使用AJAX和Scrapy的网站,我正在发送一个请求,有时我不完全理解执行的结果。这是我现在的代码:
class BaseSpider(scrapy.Spider):
results = []
def parse(self, response):
...
yield Request(url = 'https://www.books.com/ajax_more?book=book1', callback = self.parse_afte
我试图刮取一个html文件,该文件包含一个json对象和所有必需的测试用例数据,但json的处理在“find”和“parseTestCaseDetails”方法中进行,在该方法中,我迭代地获取测试用例详细信息,最后在“findInterestedFields”中解析,因此,我的要求是将测试用例的细节从层次结构中调用的最后一个方法(即findInterestedFields)生成一个json文件,有可能实现吗
提前谢谢
import scrapy
导入日期时间
导入json
进口稀土
导入集合
导
1 2 3 4 5 6 ...
下一页 最后一页 共 24 页