我使用CrawlSpider Derived类开始爬行,并使用Ctrl + C暂停它.当我再次执行命令以恢复它时,它不会继续.
我的开始和恢复命令:
scrapy crawl mycrawler -s JOBDIR=crawls/test5_mycrawl
Run Code Online (Sandbox Code Playgroud)
Scrapy创建文件夹.权限是777.
当我恢复爬行时,它只输出:
/home/adminuser/.virtualenvs/rg_harvest/lib/python2.7/site-packages/twisted/internet/_sslverify.py:184: UserWarning: You do not have the service_identity module installed. Please install it from <https://pypi.python.org/pypi/service_identity>. Without the service_identity module and a recent enough pyOpenSSL tosupport it, Twisted can perform only rudimentary TLS client hostnameverification. Many valid certificate/hostname mappings may be rejected.
verifyHostname, VerificationError = _selectVerifyImplementation()
2014-11-21 11:05:10-0500 [scrapy] INFO: Scrapy 0.24.4 started (bot: rg_harvest_scrapy)
2014-11-21 11:05:10-0500 [scrapy] INFO: Optional features available: ssl, http11, django
2014-11-21 11:05:10-0500 [scrapy] INFO: …Run Code Online (Sandbox Code Playgroud) 我是scrapinghub的新用户。我已经在谷歌上搜索过并阅读了 scrapinghub 文档,但我找不到任何关于从项目中删除蜘蛛的信息。可能吗,怎么可能?我不想替换蜘蛛,我想从scrapinghub蜘蛛列表中删除/移除它。
我一直在寻找有问题的文档,以寻找一种方法来限制我的蜘蛛可以发出的请求数量。在开发过程中,我不想坐在这里等蜘蛛完成整个爬网,即使爬网非常集中,它们仍然可能需要一段时间。
我希望能够说:“在向站点抓取了x个请求之后,我停止生成新请求。”
我想知道是否有某种设置我可能会错过,或者使用其他方法使用框架来完成,然后再尝试提出自己的解决方案。
我正在考虑实现一个下载程序中间件,该中间件将跟踪正在处理的请求数量,并在达到限制后停止将其传递给下载程序。但是就像我说的,如果可能的话,我宁愿在框架中使用一种机制。
有什么想法吗?谢谢。
对于我试图抓取的页面,我有时会在我的响应中找到一个"占位符"页面,其中包含一些自动加载的javascript,直到它获得真实页面为止.我可以检测到这种情况何时发生,我想重试下载并抓取页面.我在CrawlSpider中使用的逻辑类似于:
def parse_page(self, response):
url = response.url
# Check to make sure the page is loaded
if 'var PageIsLoaded = false;' in response.body:
self.logger.warning('parse_page encountered an incomplete rendering of {}'.format(url))
yield Request(url, self.parse, dont_filter=True)
return
...
# Normal parsing logic
Run Code Online (Sandbox Code Playgroud)
但是,似乎在调用重试逻辑并发出新请求时,它们包含的页面和链接不会被抓取或抓取.我的想法是,通过使用self.parseCrawlSpider用于应用爬网规则dont_filter=True,我可以避免重复过滤器.但是DUPEFILTER_DEBUG = True,我可以看到重试请求被过滤掉了.
我错过了什么,还是有更好的方法来解决这个问题?如果可能的话,我想避免使用像splash这样的动态js渲染的复杂性,这只是间歇性地发生.
我想使用scrapy抓取我在Downloads文件夹中找到的本地xml文件,使用xpath提取相关信息.
使用scrapy介绍作为指导
2016-01-24 12:38:53 [scrapy] DEBUG: Retrying <GET file://home/sayth/Downloads/20160123RAND0.xml> (failed 2 times): [Errno 2] No such file or directory: '/sayth/Downloads/20160123RAND0.xml'
2016-01-24 12:38:53 [scrapy] DEBUG: Gave up retrying <GET file://home/sayth/Downloads/20160123RAND0.xml> (failed 3 times): [Errno 2] No such file or directory: '/sayth/Downloads/20160123RAND0.xml'
2016-01-24 12:38:53 [scrapy] ERROR: Error downloading <GET file://home/sayth/Downloads/20160123RAND0.xml>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下面的几个版本但是我无法获得启动URL接受我的文件.
# -*- coding: utf-8 -*-
import scrapy
class MyxmlSpider(scrapy.Spider):
name = "myxml"
allowed_domains = ["file://home/sayth/Downloads"]
start_urls = (
'http://www.file://home/sayth/Downloads/20160123RAND0.xml',
)
def parse(self, response):
for file in response.xpath('//meeting'):
full_url = response.urljoin(href.extract()) …Run Code Online (Sandbox Code Playgroud) 爬虫通过命令行正常工作,给出了以下错误:
2016-03-30 03:47:59 [scrapy] INFO: Scrapy 1.0.5 started (bot: scrapybot)
2016-03-30 03:47:59 [scrapy] INFO: Optional features available: ssl, http11
2016-03-30 03:47:59 [scrapy] INFO: Overridden settings: {'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'}
Traceback (most recent call last):
File "/home/ahmeds/scrapProject/crawler/startcrawls.py", line 11, in <module>
process.crawl(onioncrawl)
File "/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py", line 150, in crawl
crawler = self._create_crawler(crawler_or_spidercls)
File "/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py", line 166, in _create_crawler
return Crawler(spidercls, self.settings)
File "/usr/local/lib/python2.7/dist-packages/scrapy/crawler.py", line 32, in __init__
self.spidercls.update_settings(self.settings)
AttributeError: 'module' object has no attribute 'update_settings'
Run Code Online (Sandbox Code Playgroud)
这是我根据最新文档按脚本运行我的爬虫的代码.我的scrapy版本是1.0.5. …
我编写了以下代码来废弃网站上的数据.
import scrapy
from porua_scrapper.items import Category
from porua_scrapper.config import SITE_URL
class CategoriesSpider(scrapy.Spider):
name = "categories"
start_urls = []
for I in range(2):
url = SITE_URL + "book/categories?page=" + str(I+1)
start_urls.append(url)
print(start_urls)
def parse(self, response):
# print(response.css('ul.categoryList li div.pFIrstCatCaroItem a').extract_first())
for category in response.css('ul.categoryList li'):
categoryObj = Category()
categoryObj['name'] = category.css('div.bookSubjectCaption h2::text').extract_first()
categoryObj['url'] = category.css('a::attr(href)').extract_first()
yield categoryObj
Run Code Online (Sandbox Code Playgroud)
当我运行命令时,scrapy crawl categories -o categories.json它将创建一个包含所需输出格式的categories.json文件.但问题是我的一些内容包含bengali文字.因此,在生成的输出文件中我得到了如下响应:
{"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"}
我该如何对内容进行编码utf-8?由于我是scrapy的新手,因此无法根据我的场景找到合适的解决方案.
提前致谢!
我想使用项目加载器的正则表达式,但我无法弄清楚如何.
通常情况下,它只是如此追加到最后:
response.xpath('*xpath*').re(*expression*)
Run Code Online (Sandbox Code Playgroud)
但是如果项目加载器不起作用,请尝试如下:
Loader.add_xpath('item', '*xpath*').re(*expression*)
Run Code Online (Sandbox Code Playgroud)
也尝试使用item.py中的MapCompose,但也没有让它工作.有人知道如何使用Item加载器使用正则表达式吗?
我的小蜘蛛会浏览一个csv文件,并使用该csv文件中的地址运行start_urls,如下所示:
from csv import DictReader
with open('addresses.csv') as rows:
start_urls=['http://www.example.com/search/?where='+row["Address"].replace(',','').replace(' ','+') for row in DictReader(rows)]
Run Code Online (Sandbox Code Playgroud)
但是.csv文件还包含电子邮件和其他信息。如何将这些额外信息传递到解析中,以将其添加到新文件中?
import scrapy
from csv import DictReader
with open('addresses.csv') as rows:
names=[row["Name"].replace(',','') for row in DictReader(rows)]
emails=[row["Email"].replace(',','') for row in DictReader(rows)]
start_urls=['http://www.example.com/search/?where='+row["Address"].replace(',','').replace(' ','+') for row in DictReader(rows)]
def parse(self,response):
yield{
'name': FROM CSV,
'email': FROM CSV,
'address' FROM SCRAPING:
'city' FROM SCRAPING:
}
Run Code Online (Sandbox Code Playgroud) 我正在用草皮爬行。我正在获取网站的全部内容。
import scrapy
import os
class QuotesSpider(scrapy.Spider):
name = "team"
def start_requests(self):
yield scrapy.Request(url='http://*****.com', callback=self.get_scripts)
def get_scripts(self, response):
print response.css("body").extract()
def get_scripts(self, response):
print response.css("body").extract()
Run Code Online (Sandbox Code Playgroud)
现在我正在搜索文本,我可以通过python通过简单的搜索文本/子字符串来获取。我想要的是选择此文本匹配的选择器。请告知执行此操作的最佳方法是什么。
scrapy ×10
scrapy-spider ×10
python ×6
python-2.7 ×2
web-scraping ×2
csv ×1
json ×1
regex ×1
scrapinghub ×1
web-crawler ×1
xml ×1
xpath ×1