标签: scrapy

如何从项目管道访问scrapy设置

如何从项目管道访问settings.py中的scrapy设置.文档提到可以通过扩展中的爬虫访问它,但我没有看到如何访问管道中的爬虫.

python settings pipeline scrapy

24
推荐指数
3
解决办法
2万
查看次数

Scrapy - 解析页面以提取项目 - 然后关注并存储项目URL内容

我有一个关于如何在scrapy中做这件事的问题.我有一只蜘蛛爬行列出物品页面.每次找到具有项目的列表页面时,都会调用parse_item()回调来提取项目数据和产生项目.到目前为止,一切都很好.

但是每个项目,除了其他数据之外,还有一个网址,其中包含有关该项目的更多详细信息.我想跟随该URL并在另一个项目字段(url_contents)中存储该项目的URL的获取内容.

而且我不确定如何组织代码来实现这一点,因为两个链接(列表链接和一个特定的项链接)遵循不同的方式,在不同的时间调用回调,但我必须在相同的项处理中关联它们.

到目前为止,我的代码如下所示:

class MySpider(CrawlSpider):
    name = "example.com"
    allowed_domains = ["example.com"]
    start_urls = [
        "http://www.example.com/?q=example",
    ]

    rules = (
        Rule(SgmlLinkExtractor(allow=('example\.com', 'start='), deny=('sort='), restrict_xpaths = '//div[@class="pagination"]'), callback='parse_item'),
        Rule(SgmlLinkExtractor(allow=('item\/detail', )), follow = False),
    )


    def parse_item(self, response):
        main_selector = HtmlXPathSelector(response)
        xpath = '//h2[@class="title"]'

        sub_selectors = main_selector.select(xpath)

        for sel in sub_selectors:
            item = ExampleItem()
            l = ExampleLoader(item = item, selector = sel)
            l.add_xpath('title', 'a[@title]/@title')
            ......
            yield l.load_item()
Run Code Online (Sandbox Code Playgroud)

python scrapy

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

未知命令:抓取错误

我是python的新手.我在64位操作系统上运行python 2.7.3版本32位.(我试过64位,但没有锻炼).

我按照教程在我的机器上安装了scrapy.我创建了一个项目demoz.但是当我输入scrapy crawl demoz它时显示错误.当我点击(C:\ python27\scripts)下的scrapy命令时,我遇到了这个东西,它显示:

C:\Python27\Scripts>scrapy
Scrapy 0.14.2 - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  fetch         Fetch a URL using the Scrapy downloader
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

Use "scrapy <command> -h" to see more info about a command

C:\Python27\Scripts>
Run Code Online (Sandbox Code Playgroud)

我想他们是安装中缺少的东西,任何人都可以帮助请...提前感谢..

python web-crawler scrapy

23
推荐指数
2
解决办法
3万
查看次数

在Scrapy中发送发布请求

我正在尝试从Google Play商店抓取最新评论,但我需要发帖请求以获取最新评论.

随着邮差它的工作,我得到了理想的回应.

在此输入图像描述

但终端中的post请求给我一个服务器错误

例如:对于此页面https://play.google.com/store/apps/details?id=com.supercell.boombeach

curl -H "Content-Type: application/json" -X POST -d '{"id": "com.supercell.boombeach", "reviewType": '0', "reviewSortOrder": '0', "pageNum":'0'}' https://play.google.com/store/getreviews
Run Code Online (Sandbox Code Playgroud)

给出了服务器错误

Scrapy只是忽略了这一行:

frmdata = {"id": "com.supercell.boombeach", "reviewType": 0, "reviewSortOrder": 0, "pageNum":0}
        url = "https://play.google.com/store/getreviews"
        yield Request(url, callback=self.parse, method="POST", body=urllib.urlencode(frmdata))
Run Code Online (Sandbox Code Playgroud)

python web-crawler scrapy python-2.7

23
推荐指数
2
解决办法
3万
查看次数

CrawlerProcess与CrawlerRunner

Scrapy 1.x文档解释了从脚本运行Scrapy蜘蛛有两种方法:

两者有什么区别?什么时候应该使用"过程"和"跑步者"?

python scrapy web-scraping

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

Scrapy - 无声地放下一个物品

我正在使用Scrapy抓取几个可能共享冗余信息的网站.

对于我抓取的每个页面,我将页面的URL,标题和html代码存储到mongoDB中.我想避免数据库中的重复,因此,我实现了一个管道,以检查是否已经存储了类似的项目.在这种情况下,我提出DropItem异常.

我的问题是,每当我通过raison DropItem异常删除项目时,Scrapy会将项目的全部内容显示在日志(stdout或文件)中.由于我正在提取每个已删除页面的整个HTML代码,因此在丢弃的情况下,整个HTML代码将显示在日志中.

如果没有显示内容,我怎么能默默地删除项目?

感谢您的时间!

class DatabaseStorage(object):
    """ Pipeline in charge of database storage.

    The 'whole' item (with HTML and text) will be stored in mongoDB.
    """

    def __init__(self):
        self.mongo = MongoConnector().collection

    def process_item(self, item, spider):
        """ Method in charge of item valdation and processing. """
        if item['html'] and item['title'] and item['url']:
            # insert item in mongo if not already present
            if self.mongo.find_one({'title': item['title']}):
                raise DropItem('Item already in db')
            else:
                self.mongo.insert(dict(item))
                log.msg("Item %s scraped" % item['title'], …
Run Code Online (Sandbox Code Playgroud)

python scrapy

22
推荐指数
3
解决办法
5199
查看次数

Scrapy:如何禁用或更改日志?

我跟随Scrapy官方统治,这太棒了!

我想从控制台输出中删除所有DEBUG消息.有办法吗?

2013-06-08 14:51:48+0000 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6029
2013-06-08 14:51:48+0000 [scrapy] DEBUG: Web service listening on 0.0.0.0:6086
Run Code Online (Sandbox Code Playgroud)

文档告诉要设置一个LOG_LEVEL,但是......在哪个文件中?

回复,请参考这个目录结构.这是我的.另外,我在spyder文件夹中有一个'test.py'

tutorial/
    scrapy.cfg
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...
Run Code Online (Sandbox Code Playgroud)

哪里.在哪个文件中,我必须如何设置log_level?

python scrapy

22
推荐指数
3
解决办法
2万
查看次数

Scrapy,在Javascript中抓取数据

scrapy用来屏蔽网站上的数据.但是,我想要的数据不在html本身内部,而是来自javascript.所以,我的问题是:

如何获取此类案例的值(文本值)?

这是我试图筛选的网站:https: //www.mcdonalds.com.sg/locate-us/

我想要的属性:地址,联系方式,营业时间.

如果您在Chrome浏览器中执行"右键单击","查看源代码",您将看到HTML中无法使用此类值.


编辑

Sry paul,我做了你告诉我的事情,找到admin-ajax.php并看到了身体但是,我现在真的被困住了.

如何从json对象中检索值并将其存储到我自己的变量字段中?如果您可以分享如何为公众和刚刚开始scrapy的人分享一个属性,那将是一件好事.

到目前为止,这是我的代码

Items.py

class McDonaldsItem(Item):
name = Field()
address = Field()
postal = Field()
hours = Field()
Run Code Online (Sandbox Code Playgroud)

McDonalds.py

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

from fastfood.items import McDonaldsItem

class McDonaldSpider(BaseSpider):
name = "mcdonalds"
allowed_domains = ["mcdonalds.com.sg"]
start_urls = ["https://www.mcdonalds.com.sg/locate-us/"]

def parse_json(self, response):

    js = json.loads(response.body)
    pprint.pprint(js)
Run Code Online (Sandbox Code Playgroud)

Sry进行长时间编辑,简而言之,我如何将json值存储到我的属性中?例如

***项目['地址'] =*如何检索****

PS,不确定这是否有帮助,但是,我使用cmd行运行这些脚本

scrapy crawl mcdonalds -o McDonalds.json -t json(将我的所有数据保存到json文件中)

我不能强调我的感激之情.我知道问你这个是不合理的,即使你没有时间这个也完全没问题.

python screen-scraping scrapy

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

ScrapyRT vs Scrapyd

到目前为止,我们一直在使用Scrapyd服务.它为scrapy项目提供了一个很好的包装器,它的蜘蛛可以通过HTTP API来控制蜘蛛:

Scrapyd是一种运行Scrapy蜘蛛的服务.

它允许您使用HTTP JSON API部署Scrapy项目并控制其蜘蛛.

但是,最近,我注意到另一个"新鲜"的包 - ScrapyRT根据项目描述,听起来非常有前途,类似于Scrapyd:

HTTP服务器,提供用于调度Scrapy蜘蛛并使用蜘蛛发出请求的API.

这个包是否可以替代Scrapyd?如果是的话,这两者有什么区别?

python scrapy web-scraping scrapyd

22
推荐指数
1
解决办法
2773
查看次数

Scrapy css选择器:获取所有内部标签的文本

我有一个标签,我希望得到所有文本.我这样做:

response.css('mytag::text')
Run Code Online (Sandbox Code Playgroud)

但它只获取当前标记的文本,我还想从所有内部标记中获取文本.

我知道我可以这样做:

response.xpath('//mytag//text()')
Run Code Online (Sandbox Code Playgroud)

但我想用css选择器来做.我怎样才能做到这一点?

html css scrapy

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