我在Scrapy中構建了一個簡單的(ish)解析器,當談到scrapy和Python時,我非常無知:-)在文件item.py
中我定義了一個thisItem()
,我將它分配給item
代碼如下。所有的工作相當游泳,parse
使用回調得到parse_dir_content
...但後來我意識到我需要刮額外的一點數據,並創建了另一個功能parse_other_content
。如何將item
中已有的內容轉換爲parse_other_content
?在函數之間傳遞類
import scrapy
from this-site.items import *
import re
import json
class DmozSpider(scrapy.Spider):
name = "ABB"
allowed_domains = ["this-site.com.au"]
start_urls = [
"https://www.this-site.com.au?page=1",
"https://www.this-site.com.au?page=2",
]
def parse(self, response):
for href in response.xpath('//h3/a/@href'):
url = response.urljoin(href.extract())
yield scrapy.Request(url, callback=self.parse_dir_contents)
def parse_dir_contents(self, response):
for sel in response.xpath('//h1[@itemprop="name"]'):
item = thisItem()
item['title'] = sel.xpath('text()').extract()
item['rate'] = response.xpath('//div[@class="rate"]/div/span/text()').extract()
so = re.search(r'\d+', response.url)
propID = so.group()
item['propid'] = propID
item['link'] = response.url
yield scrapy.Request("https://www.this-site.com.au/something?listing_id="+propID,callback=self.parse_other_content)
#yield item
def parse_other_content(self, reponse):
sel = json.loads(reponse.body)
item['rate_detail'] = sel["this"][0]["that"]
yield item
我知道我錯過了一些簡單的東西,但我似乎無法弄清楚。
這個問題還不清楚。你只是想發送'item'到另一個方法,比如作爲一個函數參數,或者讓它成爲整個'DmozSpider'類可見的變量? –
方法1有我的偏好,方法2也會工作,我猜。 – Jeroen