我已经使用scrapy框架编写了一个爬虫程序来解析产品站点。爬虫在这两个过程之间突然停止,没有完成完整的解析过程。我在这方面做了很多研究,大多数答案表明我的爬虫被网站屏蔽了。是否有任何机制,我可以通过它来检测我的蜘蛛是被网站阻止还是自己停止
下面是spider的信息级日志条目
2013-09-23 09:59:07+0000 [scrapy] INFO: Scrapy 0.18.0 started (bot: crawler)
2013-09-23 09:59:08+0000 [spider
我将运行scrapy并获得此异常我猜scrapy的downloader无法同意在与服务器协商期间使用SSL版本。尝试将设置.py设置为'SSLv3'值,如果没有帮助,尝试将其设置为'TLSv1.0'我已经解决了它,因为我启动了VPN,我将关闭它谢谢,我已经解决了它,因为我使用了VPN,所以有一个以前从未见过的错误
twisted.web._newclient.ResponseNeverReceived:
<twisted.python.failure.Failure OpenSSL.SSL
查看scrapy和scrapyD的文档,似乎可以编写scrape结果的唯一方法是在spider本身的管道中编写代码。我的同事告诉我,还有一种额外的方法可以让我从scrapyD中截取刮取的结果
有人听说过这个吗?如果有,有人能帮我解释一下吗
谢谢
Scrapyd确实是一项服务,可用于通过JSON API计划Scrapy应用程序的爬网过程。它还允许将Scrapy与不同的框架(如Django)集成,请参阅以防您感兴趣
这是Scrapyd的名字
但是,如果您怀疑是否要保存刮片结果,标准方法是在刮片应
导入json
从json.decoder导入jsondecoderror
导入请求
从..项目导入PlayerstatisticsItem
从scrapy.spider导入爬行蜘蛛
进口羊瘙痒
类PlayerStatssSpider(爬行蜘蛛):
name='player_stats'
def start_requests(self):
url = 'https://www.whoscored.com/StatisticsFeed/1/GetPlayerStatistics?catego
在第一页,它很好地删除了title标签中的文本“test1”,但在第二页“test2.html”中没有任何内容
我的剧本:
from scrapy.spider import Spider
from scrapy.selector import Selector
from testscrapy1.items import Website
class DmozSpider(Spider):
name = "bill"
allowed_domains = ["http:/
我试图检查服务的负载状态,运行curl时,服务器以
404的状态(无此类资源)。请帮忙
我也有同样的问题。结果证明是Scrapyd文档和Scrapyd分发之间的不一致
在Scrapyd 1.1.0之后添加了daemonstatus.json。()
因此,如果需要守护程序API,则需要使用master分支。并通过python setup.py install安装它。在安装master分支之前,请记住卸载通过pip install scrapyd安装的旧版本
很抱歉问了一个非常基本的问题,但是410在myproject.middleware.ProxyMiddleware:410中是什么意思?(很明显,没有人谈论它!)
我在图图中没有找到任何关于它的东西
编辑这不是重复的来源:答案说数字用于排序顺序,但没有解释为什么他们使用特定的数字。为什么在我上面的例子中使用400,为什么不使用399或401,这是有原因的吗?或者我们应该粗略地取任何符合顺序的数字 该数字可以是大致符合订单的任何数字,也可以让您灵活地在两者之间安装其他中间件
因此,您可以使用100
当使用刮花飞溅,我试图去一个下拉列表,并选择在这种情况下香草。从下拉列表中选择后,我需要截图,我目前正在工作。这是我到目前为止所拥有的
class TestSpider(scrapy.Spider):
name = 'test'
def start_requests(self):
splash_args = {
'png': 1,
'render_all': 1,
'wait': 2,
标签: Scrapy
splash-screenscrapy-splash
我在我的爬行蜘蛛中集成了scrapy splash,它只会爬行呈现开始URL。想知道如何让scrapy splash抓取内部链接。
我一直在互联网上寻找解决方案,但似乎没有一个可行的解决方案
以下是我的代码:
import scrapy
from scrapy.selector import Selector
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Rule, CrawlSpider
我试图抓取一个页面,该页面使用延迟加载来获取下一组项目。我的爬虫程序遵循正常链接,但此链接似乎有所不同:
页面:
然后是
但仅当您在浏览器中加载它时。Scrapy不会跟随链接
有没有办法让scray自动跟随第1、2、3、4页?页面跟随虚拟滚动,并且通过api获取数据
https://www.omegawatches.com/de/vintage-watches?p=1&ajax=1
它返回一个json数据,其中包含不同的详细信息,包括html格式的产品,以及下一页是否存在于带有classlin
程序未连接到\u close功能,未发现任何错误,且蜘蛛代码中的产量项目上传正常(除非“u close”未发生任何情况)
我尝试在设置中删除s3,效果很好(即进入_close功能)
如何修复?尝试下面的代码,它应该可以工作
#-*-编码:utf-8-*-
从刮擦进口信号
从scrapy.xlib.pydispatch导入调度程序
类示例Spider(scrapy.Spider):
名称=‘永远’
定义初始化(自):
dispatcher.connect(self.spider\u关闭,signa
标签: Scrapy
http-status-code-403
我有一只非常普通的蜘蛛,我可以用它来广泛爬行。我给它提供了几百个起始URL,限制了允许的_域,让它变得疯狂(我遵循建议的“避免被禁止”措施,如自动节流、无cookie、旋转用户代理、旋转代理等)
一切都进展顺利,直到一周前,这批起始URL包括一个相当大的已知域。当时,幸运的是,我正在监视刮取,并注意到大域刚刚“被跳过”。在调查原因时,域名似乎意识到我使用的是公共代理,并将我的初始请求发送到了'https://www.exampledomain.com/,因此爬行器没有找到任何要跟踪的URL,因此
这是我的蜘蛛:
from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from vrisko.items import VriskoItem
class vriskoSpider(CrawlSpider):
name
如何进行表单登录,然后使用scrapy处理该会话
例如考虑一个具有登录验证的网站,它有三个与登录会话链接的不同页面。
因此,使用scrapy,首先登录,然后在主页中刮取一些,然后按照主页中可用的特定链接,点击链接并从该页面刮取。然后再次回到主页,然后点击另一个链接,依此类推。
我有一个文件ccbank_spider.py,下面是内容
class LoginSpider(BaseSpider):
#some code
#for hitting and parsing of the Acco
我正在使用scrapy提取网页标签中的信息,然后将这些网页保存为HTML文件。例如,本网站有一些与司法案件相关的网页。我想转到每个链接,仅将与特定司法案件相关的内容保存为HTML页。例如,转到此页,然后保存与案件相关的信息
是否有一种方法可以在scrapy中递归执行此操作,并将内容保存在HTML页面中是的,您可以使用scrapy执行此操作,这将有助于:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib
我在scrapy的缓存后端中存储了大量http数据。某些页面包含错误数据。这些URL需要重新安排,以便在下次运行scrapy时下载
我提出了修改scrapy附带的虚拟缓存策略的想法。不幸的是,这似乎不起作用
有人能看到方法“是否缓存”\u“响应”\u“刷新”中的错误吗
我认为这里的答案是,你的内容很可能被压缩或压缩了
试一试
不能说这个解决方案是多功能的,但它很可能在您的情况下起作用
import os
import cPickle as pickle
from time import time
我需要帮助。我想为一个特定的网站做一个爬虫程序(DewriteJournal)。我想从站点获取这些数据,为我创建一个控制台输出,因为我主要在控制台上工作,不想经常切换。另一点是我想将数据推送到数据库中(sql等没有问题)。但不知何故,我只是在尝试执行爬虫程序时显示了这一点,我认为教程并没有真正的帮助:
2016-10-05 10:55:23 [scrapy] INFO: Scrapy 1.0.3 started (bot: undermine)
2016-10-05 10:55:23 [scra
是否可以将规则与sitemapcrawler一起使用?有些站点的旧站点地图使用http链接而不是https。每次我抓取它们时,所有链接都会被重定向(301),这将在它们(和我)这一边产生无用的流量。我认为最简单的解决方案是在链接被爬网之前对其进行处理,并将方案从http更改为https
我可以用规则来做吗?还是应该使用默认的中间件,让它基本上解析所有URL两次?忽略重定向可能是一个解决方案,但我发现它“更脏”。Scrapy sitemapcrawler具有规则属性
见:
您可以添加将过滤非ht
我在AWS Ubuntu服务器上安装了scrapy和scrapy splash。它可以正常工作一段时间,但几个小时后,我会开始收到这样的错误消息
Traceback (most recent call last):
File "/home/ubuntu/.local/lib/python3.5/site-
packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
result = result.throwExcep
我有一个刮板,使用链接提取器通过分页和解析详细页面,一切正常。示例代码如下:
class SampleSpider(CrawlSpider):
name = 'sample'
start_urls = ['https://www.some-pagination-page.com']
rules = (
Rule(LinkExtractor(restrict_xpaths='//*[contains(@class, "paging-next")]')),
标签: Scrapy
python-webbrowserscrapy-shell
在一个粗糙的外壳上,当我尝试使用查看(响应)功能时,它会打开Visual Studio代码,而不是打开浏览器。如何在浏览器上打开它
我了解到webbrowser是用于查看页面的库,我可以设置BROWSER变量以更改其默认值。在Linux Mint系统上,我应该将BROWSER变量更改为哪个值,以使view命令打开firefox?在进一步搜索后自己找到了答案
BROWSER变量的值应为/usr/bin/firefox
因此,在我的例子中,将以下行添加到我的~/.bashrc文件中就成功了:
导出浏
我正在将CrawlSpider与具有errback的规则链接抽取器一起使用
我正在使用parse_start_url来解析start_url,但是我也需要errback来解析它们
class CS(CrawlSpider):
name = "CS"
rules = (Rule(LinkExtractor(allow=[], deny=[]), follow=True, callback='my_parse', errback='my_errback'),)
我在Chrome的XPATHHelper和Firefox的XPather中尝试了以下XPATH,它总是在google搜索结果页面中显示所有代码片段(即搜索结果的描述),但在Scrapy shell中不起作用:
//span[@class='st']
如果有关系,我会像这样调用scrapy shell:
scrapy shell "http://www.google.com/search?q=myQuery"
我说hxs.select(“//span[@class='st']”)。这总是返
我正在尝试构建一个解析器,它将从包含药物信息的表中提取数据,如药物名称、形式和价格。问题是这里缺少一些值,所以当我刮取数据时,顺序会被打乱。请看下面的内容,以便更好地理解问题
表格格式:
+---------+----------+-------+
| name | form | price |
+---------+----------+-------+
| aspirin | 3 pills | 1 |
| aspirin | 5 pills | |
|
标签: Scrapy
scrapydscrapy-spider
我有一个项目,其中我必须抓取大量不同的网站。所有这些站点爬行都可以使用同一个爬行器,因为我不需要从它的主体页面中提取项目。我认为的方法是在spider文件中参数化要爬网的域,并调用scrapy crawl命令作为参数传递域和启动URL,这样我就可以避免为每个站点生成一个spider(站点列表将随着时间的推移而增加)。我们的想法是将其部署到运行scrapyd的服务器上,因此我遇到了几个问题:
这是我能采取的最好办法吗
如果是这样的话,如果我使用不同的参数多次调度同一个爬行器,是否会出现并发问题
所以我在文档中重新阅读了这些内容,但仍然无法理解我应该在项目中的哪些文件中插入这些行
from scrapy.mail import MailSender
mailer = MailSender()
mailer.send(to=["someone@example.com"], subject="Some subject", body="Some body", cc=["another@example.com"])
您可以在爬行器关闭后使用类似这样的信号发送电子邮件。但我不确定这是否是最好的
我是否可以在不改变源代码的情况下,在scrapy项目中添加一个
spider将由系统用户提供,作为egg文件。我的要求是将爬行器抓取的数据推送到消息总线
但是,我不能很好地要求用户在项目中包含消息总线push extension.py。相反,我想监听ext.item\u scraped信号,并将该数据推送到我的服务中
我在scrapy.cfg中试过这个:
[settings]
default = tutorial.settings
[extensions]
tutorial.ext.Spider
我有一个蜘蛛,我想检查我要安排的请求是否已经存在
我不希望任何方法检查下载/蜘蛛中间件内部,我只想检查蜘蛛内部
有什么方法可以调用该方法吗?我用管道做了类似于您的方法。下面的命令是我使用的代码
您应该指定一个标识符,然后使用它检查是否可以看到它
class SeenPipeline(object):
def __init__(self):
self.isbns_seen = set()
def process_item(self, item, spider):
我知道如何获得响应
问题是我必须从列表中获取一个特定的脚本,但我不知道如何执行。列表是随机的,所以不能只说list\u foo[foo1],因为它交换了它的位置,http头是这样的
head
link rel="canonical" href=" /
meta name="robots" content="noarchive" /
script data-script="TagManagerDataLayer" .... /script
script data-s
我有一个url列表,我想从中获取数据。它来自一个我想更新的数据库,但我不确定如何继续
import scrapy
import sqlite3
from datetime import datetime, timedelta
class A1hrlaterSpider(scrapy.Spider):
name = 'onehrlater'
allowed_domains = ['donedeal.ie']
timenow = datetime.now()
del
我正在尝试学习网络抓取和创建我的第一个WebSpider,但我在第一步就犯了这个错误。
当尝试创建项目时,此消息将与“我的防病毒软件”中的弹出窗口一起显示,表示该操作已被阻止。
在安装/启动Scrapy之前,我需要配置什么吗
我试着在StackOverFlow中查看类似的问题,但没有发现任何有用的东西
提前谢谢。
您没有对该目录的写入权限。。检查您的访问级别在文件夹属性=>安全性上降低,并为所有用户授予了写入权限,但仍不起作用。
有没有办法关闭管道上的碎屑爬行?我的pipline处理URL并将它们添加到列表中。当列表达到指定数量时,我想关闭爬虫程序。我知道有raiseclosespider(),但它似乎只有在从spider调用时才起作用。是的,这是可能的。您可以调用Crawler.engine.close\u spider(spider\u名称,原因)
有
问题是直截了当的,但一些上下文可能会有所帮助
我试图在使用selenium和phantomjs作为下载程序的同时部署scrapy。但问题是,它一直说,在尝试部署时,权限被拒绝。所以我想更改ghostdriver.log的路径,或者干脆禁用它。看着phantomjs-h和ghostdriver github页面,我找不到答案,我的朋友谷歌也让我失望
$ scrapy deploy
Building egg of crawler-1370960743
'build/scripts-2.7' does
我在“刮擦”的例子中找到了这一行
next\u page=response.css('div.prev-post>a::attr(href')).extract\u first()您正在将css选择器与xpath选择器组合
使用css:
'a[rel="next"]::attr(href)'
使用xpath
'//a[@rel="next"]/@href'
您正在将css选择器与xpath选择器相结合
使用css:
'a[rel="next"]::attr(href)'
使用xpath
一些背景
我正在刮页,每页有25个添加
如果有超过25个添加项,则表示您有下一页的“下一步”按钮,依此类推
每个添加都可以单独打开,以查看更多信息,但我没有这样做,因为我需要的所有信息都在添加一起列出的页面上
我正在制作一个程序,收集昨天的所有添加内容,然后发送到电子邮件
基本理念是,此人不需要每天检查新添加的内容,但添加的内容将通过电子邮件发送给他。
问题是如何将其变为刮屑?
我已经完成了抓取,工作正常,唯一要做的就是用自定义格式将这些项目发送到电子邮件。
通过自定义格式,我的意思是所有添加都
似乎产生的请求很少。不能在类似以下代码的函数中激发请求。
有人能帮我清理或者帮我开火吗?
非常感谢你的帮助
class MySpider(CrawlSpider):
...
def start_requests(self):
yield scrapy.Request(url,
callback=self.parse_items)
...
def parse_items(self, re
标签: Scrapy
python-requestspython-3.6
我有zip文件下载url,链接如下:
.
我请求了一个包含所需标题的URL,但仍然无法下载zip文件。它被重定向到旧的电影页面,或者下载不相关的zip文件内容。我知道有API可用,但我需要通过脚本来完成,而不是API或selenium
我尝试了request和scrapy-get方法,但仍然无法下载正确的zip文件
headers = {
"authority": "dl.opensubtitles.org","Connection": "keep-alive",
"user-agent":
我创建了GCP虚拟机(UBTO)。我安装了python和scrapy。
我想从那里运行spider,scrapy crawl test-o test1.csv
我从gcp打开终端并运行spider(已运行),至少需要3个小时
如何确保退出终端(浏览器)时脚本将继续。您可以使用nohup确保爬网继续:
nohup scrapy crawl test -o test1.csv &
当您注销时,爬虫程序将继续运行,直到完成。最后的&将使流程在后台执行。
要将输出重定向到日志文件,可以按如下方
我创建了一个scrapy项目,希望有两个独立的spider(使用两个不同的名称):
我试图只运行带有命令scrapy crawl nameofspider的“listing_enseigne.py”spider,但这个命令似乎也运行另一个spider(来自文件“detail_enseigne.py”)
但是,当查看scrapy文档时,似乎该命令应该只运行名为的spider
如果有人能帮我。。谢谢
编辑1:
事实上,scrapy不会同时运行这两个程序,但它会执行在实际爬行程序之前运行的所有爬行程
我正在尝试创建一个爬行器,它可以遍历一定数量的起始URL,如果生成的页面是正确的,我将生成另一个请求。问题是,如果我尝试不产生第二个请求,爬行器将直接停止。如果我答应第二个请求,就没有问题了
以下是相关代码:
def start_请求(自我):
URL=['https://www.hltv.org“+玩家对玩家在self.hashPlayers中]
打印(len(URL))
对于url中的url:
return[scrapy.Request(url=url,callback=self.parse
我正在为一个论坛写一只蜘蛛。我正在尝试递归地抓取某个部分的某些页面。因此,我制定了以下规则:
rules = (
Rule (SgmlLinkExtractor(allow=('&order=desc&page=\d'),restrict_xpaths=("//td[@class='navpage']/a"))
,callback='parse_items', follow= True),)
是否可以设置页面限制,以便蜘蛛可以抓取有限数量的页面?例如,从第1页爬
我阅读了一些其他类似的堆栈溢出线程,这些线程都是针对那些在运行spider时遇到类似问题的人的,但我认为我在Cloud 9 IDE上的设置有点不同,或者我遗漏了一些东西。下面是我的树:
mikeumus@scrapy-phishtank:~/workspace $ tree
.
├── README.md
├── db.sqlite3
├── manage.py
├── scrapetank
│ ├── scrapetank
│ │ ├── __init__.py
│ │
我正在使用scrapy刮取一些数据,我想知道请求-响应存储了多少数据
我的具体问题如下代码所示:
def parse(self,response):
r = FormRequest(url=url1, formdata={somedata}, callback=parse2)
#is this line necessary if I want the formdata being attached?
r.meta['formdata'] = formdata
我正在Hostelworld.com上运行以下scrapy spider以检索:
第一页上的大陆、国家和国家URL
跟踪国家url后来自给定国家的城市列表
def parse_page1(self, response):
for sel in response.xpath('//li[@class="accordion-navigation"]//ul[@class="small-block-grid-2 medium-block-grid-4 large-block-grid-6"]
我在\u CLOSE=10之前设置了调度程序\u IDLE\u,但是爬行器没有关闭并保持在空闲状态
我在Redimixin类中重写了scrapy redis的spider_idle函数:
def spider_idle(self):
self.schedule_next_requests()
# raise DontCloseSpider
现在爬行器将关闭,但无法完全使用所有的起始URL
我是否需要自己检查redis中的start_URL和请求,以确定是否需要提升DontClo
标签: Scrapy
robots.txtyahoo-finance
中的robots.txt表示:
雅虎财经是否禁止网络垃圾?
什么是雅虎财经网站不允许的?
我们可以从雅虎的robots.txt文件中推断出什么 在robots.txt文件中没有任何内容明确禁止您删除雅虎财经,但是雅虎财经受其管辖
本文档最相关的部分基本上是说,您不应该做任何会干扰他们服务的事情。现实地说,这意味着如果你打算从雅虎财经网站上获取数据,你应该负责任地这样做(不是成千上万的请求,因为这会很快让你被禁止)
这就是说,web抓取通常效率很低(因为您重新加载整个HTML页面只是为了以编程方式
DefaultHeadersMiddleware可以做所有的UserAgentMiddleware可以做什么?那么UserAgentMiddleware的含义是什么?我相信这只是为了简单起见。
用户代理是一种非常常见的更改,因此能够通过User\u-agent设置或spiderUser\u-agent属性设置它有时会非常有用
例如,从命令行更改用户代理非常简单:
scrapy <command> -s USER_AGENT=something
scrapy-s USER\u AGE
在抓取亚马逊的评论时,我总是在5000条评论上碰壁,即使该产品有40000条评论。有没有办法越过这个障碍并刮取更多的页面?要在直接从搜索结果刮取时获得更多页面,可以使用过滤器将搜索划分为更小的部分。例如,具有星级评级的评论可能首先搜索一个星级,然后搜索两个星级,等等。这当然不能保证所有结果,但会增加您的机会。有些过滤器可能更多,但更难实现,例如标记或用户名
或者,通过他们的计划直接访问数据和/或成为附属机构
背景:
def parse(self, response):
links = response.css('div.title--inline').css('a::attr(href)').extract()
try:
pagination = response.css('li.pagination--next').css('a::attr(href)').extract_first()
except:
pagination = False
刮擦爬网链接-一个“{”URL:“,”包含“:”hello“,”Xpath“:”hiii“}”首先需要为字典中的pass参数调用一个变量。在这里,我假设您想从这个字典中获取url
url_Scraper = {"urls":"https://www.xyz.in","contains":"hello","Xpath":"hiii" }
print(url_scraper["urls"])
您可以从字典中获取任何特定元素。您只需要将特定的字典键放在变量后面的方括号内。为了更好地理解,请参见第二
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 24 页