【发布时间】:2017-03-30 06:35:37
【问题描述】:
我正在尝试抓取此页面:https://coinmarketcap.com/currencies/views/all/
在所有行的td[2] 中是一个链接。我试图让scrapy 转到td 中的每个链接,并抓取链接所代表的页面。以下是我的代码:
注意:另一个人非常棒地帮助我走到了这一步
class ToScrapeSpiderXPath(CrawlSpider):
name = 'coinmarketcap'
start_urls = [
'https://coinmarketcap.com/currencies/views/all/'
]
rules = (
Rule(LinkExtractor(restrict_xpaths=('//td[2]/a',)), callback="parse", follow=True),
)
def parse(self, response):
BTC = BTCItem()
BTC['source'] = str(response.request.url).split("/")[2]
BTC['asset'] = str(response.request.url).split("/")[4],
BTC['asset_price'] = response.xpath('//*[@id="quote_price"]/text()').extract(),
BTC['asset_price_change'] = response.xpath(
'/html/body/div[2]/div/div[1]/div[3]/div[2]/span[2]/text()').extract(),
BTC['BTC_price'] = response.xpath('/html/body/div[2]/div/div[1]/div[3]/div[2]/small[1]/text()').extract(),
BTC['Prct_change'] = response.xpath('/html/body/div[2]/div/div[1]/div[3]/div[2]/small[2]/text()').extract()
yield (BTC)
即使表格超过 600 多个链接/页面,当我运行 scrapy crawl coinmarketcap 时,我也只得到 19 条记录。这意味着 600+ 的列表中只有 19 页。我没有看到停止刮擦的问题。任何帮助将不胜感激。
谢谢
【问题讨论】:
-
请分享您的爬取日志,尤其是末尾的 stats dict,您可以在其中查看已安排的请求数量、可能被过滤的数量、您获得的各种状态代码等。跨度>
-
如果将回调从
parse()更改为parse_item()(并在规则中也调整回调名称)怎么办?