検索ページを通過し、その中のすべての結果をループしてサイトを削っています。しかし、それは各ページの最初の結果を返すように見えるだけです。また、スタートページの結果にも当てはまるとは思わない。Scrapy:検索結果をループすると、最初の項目のみが返されます。
第2に、価格はUnicode(£記号)の何らかの種類として戻ってきています。価格を残すだけではどうすれば削除できますか?
'regular_price': [u'\xa38.59'],
ここでHTMLれる: http://pastebin.com/F8Lud0hu
がここにクモです:
import scrapy
import random
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from cdl.items import candleItem
class cdlSpider(CrawlSpider):
name = "cdl"
allowed_domains = ["www.xxxx.co.uk"]
start_urls = ['https://www.xxxx.co.uk/advanced_search_result.php']
rules = [
Rule(LinkExtractor(
allow=['advanced_search_result\.php\?sort=2a&page=\d*']),
callback='parse_listings',
follow=True)
]
def parse_listings(self, response):
sel = Selector(response)
urls = sel.css('a.product_img')
for url in urls:
url = url.xpath('@href').extract()[0]
return scrapy.Request(url,callback=self.parse_item)
def parse_item(self, response):
candle = candleItem()
n = response.css('.prod_info_name h1')
candle['name'] = n.xpath('.//text()').extract()[0]
if response.css('.regular_price'):
candle['regular_price'] = response.css('.regular_price').xpath('.//text()').extract()
else:
candle['was_price'] = response.css('.was_price strong').xpath('.//text()').extract()
candle['now_price'] = response.css('.now_price strong').xpath('.//text()').extract()
candle['referrer'] = response.request.headers.get('Referer', None)
candle['url'] = response.request.url
yield candle
を、 リターンscrapy.Request(URL、コールバック= self.parse_item) からの変更をありがとうTo: yield scrapy.Request(url、callback = self.parse_item) 完全に動作します。 –
こんにちは、後続の質問申し訳ありません。私が掻き集めている価格のいくつかは数千にあり、コンマでフォーマットされています(例えば£1,190.00)。これらのものでは、正規表現の条件はここでの価格とちょうど "1"と一致します。通常の価格は正常に動作します。これをどのように修正するかについての提案がありますか?ありがとう –
正規表現 '\ d + \。?\ d * ''を ''(?:\ d {1,3} [、\。])* \ d \ d'に変更してください。 – Guillaume