Я использую Scrapy 1.5.1
с Python 2.7.6
. Я пытаюсь очистить имена пользователей со следующей страницы.
Я выполнил следующий код:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request
class BtctalkspiderSpider(scrapy.Spider):
name = 'btctalkSpider'
allowed_domains = ['bitcointalk.org']
max_uid = 10
def parse(self, response):
urls = response.xpath("//a/@href").extract()
for i in range(self.max_uid):
# scrapy shell "https://bitcointalk.org/index.php?action=profile;u=1"
yield Request('https://bitcointalk.org/index.php?action=profile;u=%d' % i, callback=self.parse_application)
def parse_application(self, response):
userName = response.xpath('//td[normalize-space(.)="Name:"]/following-sibling::td/text()').extract()
yield {
'userName': userName
}
Однако, пытаясь очистить сайт, я получаю []
назад.
Я проверил свой xpath
через оболочку, и все работает.
Любые предложения, что я делаю неправильно?
Некоторые из URL-адресов профилей просто не существуют, поэтому выражение XPath не оценивалось ничем.
например: https://bitcointalk.org/index.php?action=profile;u=2
Но, также, вам нужно указать начальный url для ex: start_urls = ['https://bitcointalk.org']
или просто добавить функцию start_requests
.
Вот цитата из документов start_urls
относительно start_urls
1...
Вместо внедрения метода start_requests(), который генерирует scrapy. Запросите объекты из URL-адресов, вы можете просто определить атрибут класса start_urls со списком URL-адресов.
profile;u=1
ничего не возвращается?
start_urls = ['https://bitcointalk.org']
или просто добавить функцию start_requests
.
[]
обратно?