Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用不同的刮刀刮削随动连杆_Python_Scrapy - Fatal编程技术网

Python 用不同的刮刀刮削随动连杆

Python 用不同的刮刀刮削随动连杆,python,scrapy,Python,Scrapy,我正在用Scrapy刮一个网页。我写了我的spider,它工作得很好,它在一个页面上刮取一个项目列表(我们称之为主页)。 在主页中,我考虑的每一个项目都有一个链接,指向详细的项目页面(让我们这样称呼),在那里找到关于每个项目的详细信息。p> 现在我也想抓取细节页面,但蜘蛛会有所不同,在不同的地方会找到不同的信息。有没有可能让scrapy在一个特定的地方寻找链接,然后将那些与我将要定义的另一个蜘蛛链接的页面刮去 我希望我的解释足够清楚。谢谢您可以使用BeautifulSoup定义要刮的位置。我曾尝

我正在用Scrapy刮一个网页。我写了我的spider,它工作得很好,它在一个页面上刮取一个项目列表(我们称之为主页)。 在主页中,我考虑的每一个项目都有一个链接,指向详细的项目页面(让我们这样称呼),在那里找到关于每个项目的详细信息。p> 现在我也想抓取细节页面,但蜘蛛会有所不同,在不同的地方会找到不同的信息。有没有可能让scrapy在一个特定的地方寻找链接,然后将那些与我将要定义的另一个蜘蛛链接的页面刮去


我希望我的解释足够清楚。谢谢

您可以使用BeautifulSoup定义要刮的位置。我曾尝试使用BeautifulSoup编写一个spider程序,该程序指定要与Urllib一起查找的部分。我想这会对你有用。基于此,我写了自己的。希望它能帮助您首先识别模式,然后为每个模式编写刮板,然后根据您正在跟踪的链接使用相关的刮板功能。

要详细说明我之前的评论,这里有一个示例spider,它有两个回调:

  • parse()
    将包含“主页”已有的逻辑,从主页生成项目,并为每个项目的详细信息页生成获取请求
  • parse\u detail\u page()
    与其他选择器具有不同的刮取逻辑, 并产生另一类项目
:


你是说需要不同的蜘蛛?(不同的域、不同的设置等)或者不同的回调是否足够(不同的选择器、不同的项)您可以在同一个spider中定义许多不同的回调,也可以使用不同的域aswell@pault. 你说的很有意思,你能举例说明我是如何做到的吗?我是一个新手,我添加了一个答案,其基本原理是在同一个蜘蛛中对不同的页面进行多次回调
from scrapy.selector import HtmlXPathSelector
from scrapy.spider import BaseSpider
from scrapy.http import Request
#import urlparse

# items are usually defined in yourproject.items.py
# from yourproject.items import BasicPageItem, DetailPageItem
# I'm defining them here only to illustrate
from scrapy.item import Item

class MainPageItem(Item):
    url = Field()
    name = Field()
    description = Field()

class DetailPageItem(Item):
    url = Field()
    title = Field()
    long_description = Field()
    image = Field()

class MySpider(BaseSpider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = [
        'http://www.example.com/1.html',
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        for i in hxs.select('//selector/for/items').extract():
            item = MainPageItem()
            #item["url"] = item_url
            #item["name"] = item_page
            #item["description"] = item_description
            yield item

            # each item on Main page has a link
            # so yield a Request for each one
            # and tell Scrapy to parse it within another callback
            #item_url = urlparse.urljoin(response.url, item_url)
            yield Request(item_url, callback=self.parse_detail_page)

    def parse_detail_page(self, response):
        hxs = HtmlXPathSelector(response)

        item = DetailPageItem()
        item["url"] = response.url
        #item["title"] = title
        #item["long_description"] = long_description
        #item["image"] = image
        yield item