标签: scrapy-spider

Scrapy抓取简历不会爬行任何东西,只是完成

我使用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)

scrapy scrapy-spider

2
推荐指数
1
解决办法
2046
查看次数

从scrapinghub删除蜘蛛

我是scrapinghub的新用户。我已经在谷歌上搜索过并阅读了 scrapinghub 文档,但我找不到任何关于从项目中删除蜘蛛的信息。可能吗,怎么可能?我不想替换蜘蛛,我想从scrapinghub蜘蛛列表中删除/移除它。

web-crawler scrapy scrapinghub scrapy-spider

2
推荐指数
1
解决办法
1304
查看次数

严格的测试限制要求

我一直在寻找有问题的文档,以寻找一种方法来限制我的蜘蛛可以发出的请求数量。在开发过程中,我不想坐在这里等蜘蛛完成整个爬网,即使爬网非常集中,它们仍然可能需要一段时间。

我希望能够说:“在向站点抓取了x个请求之后,我停止生成新请求。”

我想知道是否有某种设置我可能会错过,或者使用其他方法使用框架来完成,然后再尝试提出自己的解决方案。

我正在考虑实现一个下载程序中间件,该中间件将跟踪正在处理的请求数量,并在达到限制后停止将其传递给下载程序。但是就像我说的,如果可能的话,我宁愿在框架中使用一种机制。

有什么想法吗?谢谢。

python scrapy web-scraping python-2.7 scrapy-spider

2
推荐指数
1
解决办法
1799
查看次数

Scrapy CrawlSpider重试刮擦

对于我试图抓取的页面,我有时会在我的响应中找到一个"占位符"页面,其中包含一些自动加载的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渲染的复杂性,这只是间歇性地发生.

python scrapy scrapy-spider

2
推荐指数
1
解决办法
1077
查看次数

使用Scrapy爬网本地XML文件 - 启动URL本地文件地址

我想使用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)

python xml xpath scrapy scrapy-spider

2
推荐指数
1
解决办法
1999
查看次数

AttributeError:'module'对象没有属性'update_settings'scrapy 1.0.5

爬虫通过命令行正常工作,给出了以下错误:

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. …

attributeerror scrapy python-2.7 scrapy-spider

2
推荐指数
1
解决办法
2066
查看次数

Scrapy json响应转换为utf-8编码

我编写了以下代码来废弃网站上的数据.

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的新手,因此无法根据我的场景找到合适的解决方案.

提前致谢!

python json scrapy scrapy-spider

2
推荐指数
2
解决办法
3282
查看次数

使用带项目加载器的正则表达式

我想使用项目加载器的正则表达式,但我无法弄清楚如何.

通常情况下,它只是如此追加到最后:

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加载器使用正则表达式吗?

regex scrapy scrapy-spider

2
推荐指数
1
解决办法
505
查看次数

Scrapy将多余的数据从csv文件传递到解析

我的小蜘蛛会浏览一个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)

python csv scrapy scrapy-spider

2
推荐指数
1
解决办法
660
查看次数

scrapy:查找具有特定文本的元素

我正在用草皮爬行。我正在获取网站的全部内容。

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通过简单的搜索文本/子字符串来获取。我想要的是选择此文本匹配的选择器。请告知执行此操作的最佳方法是什么。

python scrapy web-scraping scrapy-spider

2
推荐指数
1
解决办法
3929
查看次数