相关疑难解决方法(0)

硒与scrapy动态页面

我正在尝试使用scrapy从网页上抓取产品信息.我的待删节网页如下所示:

  • 从包含10个产品的product_list页面开始
  • 点击"下一步"按钮加载下10个产品(两个页面之间的网址不变)
  • 我使用LinkExtractor跟踪每个产品链接到产品页面,并获得我需要的所有信息

我试图复制next-button-ajax-call但是无法正常工作,所以我试试了selenium.我可以在一个单独的脚本中运行selenium的webdriver,但我不知道如何与scrapy集成.我应该把硒部分放在我的scrapy蜘蛛里?

我的蜘蛛非常标准,如下所示:

class ProductSpider(CrawlSpider):
    name = "product_spider"
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/shanghai']
    rules = [
        Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'),
        ]

    def parse_product(self, response):
        self.log("parsing product %s" %response.url, level=INFO)
        hxs = HtmlXPathSelector(response)
        # actual data follows
Run Code Online (Sandbox Code Playgroud)

任何想法都表示赞赏.谢谢!

python selenium scrapy web-scraping selenium-webdriver

74
推荐指数
1
解决办法
7万
查看次数

如何以编程方式设置和启动Scrapy spider(网址和设置)

我已经使用scrapy编写了一个正在运行的爬虫,
现在我想通过Django webapp来控制它,也就是说:

  • 设置1或几个 start_urls
  • 设置1或几个 allowed_domains
  • 设定settings
  • 启动蜘蛛
  • 停止/暂停/恢复蜘蛛
  • 运行时检索一些统计数据
  • 在蜘蛛完成后检索一些统计数据.

起初我认为scrapyd为此而制作的,但在阅读了文档之后,似乎它更像是一个能够管理"打包蜘蛛"的守护进程,也就是"scrapy eggs"; 并且所有的设置(start_urls,allowed_domains,settings)仍必须在"scrapy鸡蛋"本身硬编码; 所以它看起来不像我的问题的解决方案,除非我错过了什么.

我还看了这个问题:如何为scrapy提供URL以进行爬行?; 但提供多个网址的最佳答案是由作者himeslf认定为"丑陋的黑客",涉及一些python子进程和复杂的shell处理,所以我认为这里找不到解决方案.此外,它可能适用start_urls,但它似乎不允许allowed_domainssettings.

然后我看了scrapy webservices:它似乎是检索统计数据的好方法.但是,它仍然需要一个正在运行的蜘蛛,并且没有改变的线索settings

关于这个问题有几个问题,似乎没有一个问题令人满意:

我知道scrapy用于生产环境; 像scrapyd这样的工具表明,确实有一些方法可以满足这些要求(我无法想象用于处理的scrapy egg scrap是手工生成的!)

非常感谢你的帮助.

python scrapy scrapyd

25
推荐指数
3
解决办法
6167
查看次数

在一些网站上使用一个Scrapy蜘蛛

我需要创建一个用户可配置的Web蜘蛛/爬虫,我正在考虑使用Scrapy.但是,我无法对域进行硬编码并允许使用URL正则表达式:es - 这可以在GUI中进行配置.

我如何(尽可能简单)使用Scrapy创建一个蜘蛛或一组蜘蛛,其中域和允许的URL正则表达式是可动态配置的?例如,我将配置写入文件,蜘蛛以某种方式读取它.

python web-crawler scrapy

12
推荐指数
1
解决办法
6619
查看次数

具有Scrapy子类初始化错误的动态蜘蛛生成

我试图编写一个通用的“ Master”蜘蛛,将其与执行期间动态插入的“ start_urls”和“ allowed_domains”一起使用。(最终,我将这些存储在数据库中,然后将其拉出,然后用于初始化和抓取每个数据库条目的新蜘蛛。)

目前,我有两个文件:

  1. MySpider.py-建立我的“主”蜘蛛类。
  2. RunSpider.py-执行我动态生成的蜘蛛的初始化的概念证明。

为了编写这两个文件,我引用了以下内容:

我考虑了scrapyD,但我认为它不是我想要的...

这是我写的:

MySpider.py-

import scrapy

class BlackSpider(scrapy.Spider):
    name = 'Black1'

    def __init__(self, allowed_domains=[], start_urls=[], *args, **kwargs):
        super(BlackSpider, self).__init__(*args, **kwargs)
        self.start_urls = start_urls
        self.allowed_domains = allowed_domains
        #For Testing: 
        print start_urls
        print self.start_urls
        print allowed_domains
        print self.allowed_domains

    def parse(self, response):
        #############################
        # Insert my parse code here #
        #############################
        return items
Run Code Online (Sandbox Code Playgroud)

RunSpider.py-

import scrapy
from scrapy.crawler import CrawlerProcess
from MySpider import BlackSpider

#Set my …
Run Code Online (Sandbox Code Playgroud)

python bots web-crawler scrapy scrapy-spider

5
推荐指数
1
解决办法
1233
查看次数

是否需要为他们所针对的每个站点编写刮刀?

我是刮刮新手.我写了一个刮刀,它将刮掉Maplin商店.我用Python作为语言,使用BeautifulSoup刮掉商店.

我想问一下,如果我需要刮一些其他的网络商店(说亚马逊,Flipkart),做我需要定制我的代码,因为他们有不同的HTML模式(idclass名称不同,加上其他的东西也一样).所以,我写的刮刀不适用于其他电子商务商店.

我想知道价格比较网站如何从所有在线商店中获取数据?他们对不同的在线商店有不同的代码,还是有通用的?他们是否研究每个在线商店的HTML架构?

html python beautifulsoup html-parsing web-scraping

4
推荐指数
1
解决办法
3115
查看次数

将论据传递给scrapy

我遵循这两篇文章的建议,因为我也在尝试创建一个通用的scrapy蜘蛛:

如何在scrapy spider中传递用户定义的参数

创建一个通用的scrapy蜘蛛

但我得到一个错误,我应该作为参数传递的变量没有定义.我在init方法中遗漏了什么吗?

码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from data.items import DataItem

class companySpider(BaseSpider):
    name = "woz"

    def __init__(self, domains=""):
        '''
        domains is a string
        '''
        self.domains = domains

    deny_domains = [""]
    start_urls = [domains]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('/html')
        items = []
        for site in sites:
            item = DataItem()
            item['text'] = site.select('text()').extract()
            items.append(item)
        return items
Run Code Online (Sandbox Code Playgroud)

这是我的命令行:

scrapy crawl woz -a domains="http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
Run Code Online (Sandbox Code Playgroud)

这是错误:

NameError: name 'domains' is not …
Run Code Online (Sandbox Code Playgroud)

arguments web-crawler scrapy

3
推荐指数
1
解决办法
3323
查看次数