0
我已經在scrapy中編寫了一個腳本來遞歸爬取網站。但由於某種原因,它無法做到。我已經在崇高中測試了xpaths,並且它工作得很完美。所以,在這一點上,我無法解決我做錯了什麼。當兩個規則設置爲遞歸時,Scrapy無法抓取
「items.py」 包括:
import scrapy
class CraigpItem(scrapy.Item):
Name = scrapy.Field()
Grading = scrapy.Field()
Address = scrapy.Field()
Phone = scrapy.Field()
Website = scrapy.Field()
名爲 「craigsp.py」 蜘蛛包括:
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class CraigspSpider(CrawlSpider):
name = "craigsp"
allowed_domains = ["craigperler.com"]
start_urls = ['https://www.americangemsociety.org/en/find-a-jeweler']
rules=[Rule(LinkExtractor(restrict_xpaths='//area')),
Rule(LinkExtractor(restrict_xpaths='//a[@class="jeweler__link"]'),callback='parse_items')]
def parse_items(self, response):
page = response.xpath('//div[@class="page__content"]')
for titles in page:
AA= titles.xpath('.//h1[@class="page__heading"]/text()').extract()
BB= titles.xpath('.//p[@class="appraiser__grading"]/strong/text()').extract()
CC = titles.xpath('.//p[@class="appraiser__hours"]/text()').extract()
DD = titles.xpath('.//p[@class="appraiser__phone"]/text()').extract()
EE = titles.xpath('.//p[@class="appraiser__website"]/a[@class="appraiser__link"]/@href').extract()
yield {'Name':AA,'Grading':BB,'Address':CC,'Phone':DD,'Website':EE}
我與運行的命令是:
scrapy crawl craigsp -o items.csv
希望有人能帶領我走向正確的方向。
哦,我的天啊!它現在工作完美。感謝zillion先生的Granitosaurus。你能告訴我爲什麼它不能與我之前在允許的域部分寫的東西導致許多其他網站,當我嘗試使用相同的爬網成功。順便說一句,這一次 我運行保持空白。如果我想填寫允許的域部分,除了留空之外,我可以寫些什麼。再次感謝先生。 – SIM
@ SMth80 unforutantely此設置不支持通配符,因此默認情況下,所以您需要輸入您手動預期的所有域。但是,通過擴展一個允許使用正則表達式模式的中間件(例如,'。+ \ .com'允許所有的.com域),您可以非常容易地擴展此功能。在這裏看到我對這個問題的答案:http://stackoverflow.com/questions/39093211/scrapy-offsite-request-to-be-processed-based-on-a-regex/39098601#39098601 – Granitosaurus
再次感謝先生,爲您的善意的回覆。要遵循你提供的鏈接。 – SIM