相关疑难解决方法(0)

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中苦苦挣扎,而且我不明白回调之间传递项目的确切方式。也许有人可以帮助我。

我正在调查http://doc.scrapy.org/en/latest/topics/request-response.html#passing-additional-data-to-callback-functions

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    request = scrapy.Request("http://www.example.com/some_page.html",
                             callback=self.parse_page2)
    request.meta['item'] = item
    return request

def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    return item
Run Code Online (Sandbox Code Playgroud)

我正在尝试逐步了解那里的行动流程:

[parse_page1]

  1. item = MyItem() <-对象项已创建
  2. item['main_url'] = response.url <-我们正在为对象项的main_url分配值
  3. request = scrapy.Request("http://www.example.com/some_page.html", callback=self.parse_page2) <-我们正在请求一个新页面并启动parse_page2进行剪贴。

[parse_page2]

  1. item = response.meta['item']<-我在这里不明白。我们正在创建一个新的对象项,或者这是在[parse_page1]中创建的对象项?什么是response.meta ['item']是什么意思?我们仅在3个信息(例如链接和回调)中传递给请求,因此未添加任何其他可引用的参数...
  2. item['other_url'] = response.url <-我们正在为对象项的other_url赋值
  3. return item <-我们根据请求返回项目对象

[parse_page1]

  1. request.meta['item'] = item<-我们正在分配要请求的对象项目吗?但是请求完成后,回调已经在6中返回了项目?
  2. return request <-我们正在获取请求的结果,所以从6开始的项目对吗?

我浏览了所有有关scrapy和request / response / meta的文档,但是我仍然不明白第4点和第7点的情况。

python scrapy

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

标签 统计

python ×2

scrapy ×2

asynchronous ×1

hashmap ×1

sorting ×1