相关疑难解决方法(0)

Scrapy:关注链接以获取其他商品数据?

我没有特定的代码问题我只是不确定如何使用Scrapy框架在逻辑上处理以下问题:

我想要抓取的数据结构通常是每个项目的表格行.直截了当,对吧?

最终,我想要删除每一行的标题,截止日期详细信息. 标题截止日期可立即在页面上找到...

但是细节本身不在表格中 - 而是指向包含细节的页面的链接(如果这里没有意义,那么这是一个表格):

|-------------------------------------------------|
|             Title              |    Due Date    |
|-------------------------------------------------|
| Job Title (Clickable Link)     |    1/1/2012    |
| Other Job (Link)               |    3/2/2012    |
|--------------------------------|----------------|
Run Code Online (Sandbox Code Playgroud)

即使在阅读了Scrapy文档的CrawlSpider部分之后,我恐怕仍然不知道如何使用回调和请求在逻辑上传递项目.

callback hyperlink scrapy

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

Scrapy按顺序抓取网址

所以,我的问题相对简单.我有一个蜘蛛爬行多个站点,我需要它按照我在代码中写入的顺序返回数据.它发布在下面.

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from mlbodds.items import MlboddsItem

class MLBoddsSpider(BaseSpider):
   name = "sbrforum.com"
   allowed_domains = ["sbrforum.com"]
   start_urls = [
       "http://www.sbrforum.com/mlb-baseball/odds-scores/20110328/",
       "http://www.sbrforum.com/mlb-baseball/odds-scores/20110329/",
       "http://www.sbrforum.com/mlb-baseball/odds-scores/20110330/"
   ]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//div[@id="col_3"]//div[@id="module3_1"]//div[@id="moduleData4952"]')
       items = []
       for site in sites:
           item = MlboddsItem()
           item['header'] = site.select('//div[@class="scoreboard-bar"]//h2//span[position()>1]//text()').extract()# | /*//table[position()<2]//tr//th[@colspan="2"]//text()').extract()
           item['game1'] = site.select('/*//table[position()=1]//tr//td[@class="tbl-odds-c2"]//text() | /*//table[position()=1]//tr//td[@class="tbl-odds-c4"]//text() | /*//table[position()=1]//tr//td[@class="tbl-odds-c6"]//text()').extract()
           items.append(item)
       return items
Run Code Online (Sandbox Code Playgroud)

结果以随机顺序返回,例如它返回第29个,然后是第28个,然后是第30个.我已经尝试将调度程序顺序从DFO更改为BFO,以防万一是问题,但这并没有改变任何东西.

python sorting asynchronous hashmap scrapy

21
推荐指数
4
解决办法
3万
查看次数

Scrapy中每个项目有多个页面

免责声明:我对Scrapy很新.

明确地提出我的问题:如何从页面上的链接检索Item属性并将结果返回到同一个Item中?

给出以下示例蜘蛛:

class SiteSpider(Spider):
    site_loader = SiteLoader
    ...
    def parse(self, response):
        item = Place()
        sel = Selector(response)
        bl = self.site_loader(item=item, selector=sel)
        bl.add_value('domain', self.parent_domain)
        bl.add_value('origin', response.url)
        for place_property in item.fields:
            parse_xpath = self.template.get(place_property)

            # parse_xpath will look like either:
            # '//path/to/property/text()'
            # or
            # {'url': '//a[@id="Location"]/@href', 
            #  'xpath': '//div[@class="directions"]/span[@class="address"]/text()'}
            if isinstance(parse_xpath, dict):  # place_property is at a URL
                url = sel.xpath(parse_xpath['url_elem']).extract()
                yield Request(url, callback=self.get_url_property,
                              meta={'loader': bl, 'parse_xpath': parse_xpath,
                                    'place_property': place_property})
            else:  # parse_xpath is just an xpath; process normally
                bl.add_xpath(place_property, …
Run Code Online (Sandbox Code Playgroud)

python scrapy

6
推荐指数
1
解决办法
3781
查看次数

Scrapy 将子站点项与站点项合并

我试图从子站点中抓取详细信息并与通过 site 抓取的详细信息合并。我一直在研究 stackoverflow 以及文档。但是,我仍然无法让我的代码工作。似乎我从子站点提取其他详细信息的功能不起作用。如果有人能看一下,我将不胜感激。

# -*- coding: utf-8 -*-
from scrapy.spiders import Spider
from scrapy.selector import Selector
from scrapeInfo.items import infoItem
import pyodbc


class scrapeInfo(Spider):
    name = "info"
    allowed_domains = ["http://www.nevermind.com"]
    start_urls = []

    def start_requests(self):

        #Get infoID and Type from database
        self.conn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=dbname;UID=user;PWD=password')
        self.cursor = self.conn.cursor()
        self.cursor.execute("SELECT InfoID, category FROM dbo.StageItem")

        rows = self.cursor.fetchall()

        for row in rows:
            url = 'http://www.nevermind.com/info/'
            InfoID = row[0]
            category = row[1]
            yield self.make_requests_from_url(url+InfoID, InfoID, category, self.parse)

    def make_requests_from_url(self, …
Run Code Online (Sandbox Code Playgroud)

python merge function scrapy

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