В настоящее время я пытаюсь запустить следующий код, но он продолжает выскабливать только первый результат каждой страницы. Есть идеи, что может быть проблемой?Scrapy только соскабливает первый результат каждой страницы
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from firstproject.items import xyz123Item
import urlparse
from scrapy.http.request import Request
class MySpider(CrawlSpider):
name = "xyz123"
allowed_domains = ["www.xyz123.com.au"]
start_urls = ["http://www.xyz123.com.au/",]
rules = (Rule (SgmlLinkExtractor(allow=("",),restrict_xpaths=('//*[@id="1234headerPagination_hlNextLink"]',))
, callback="parse_xyz", follow=True),
)
def parse_xyz(self, response):
hxs = HtmlXPathSelector(response)
xyz = hxs.select('//div[@id="1234SearchResults"]//div/h2')
items = []
for xyz in xyz:
item = xyz123Item()
item ["title"] = xyz.select('a/text()').extract()[0]
item ["link"] = xyz.select('a/@href').extract()[0]
items.append(item)
return items
версия Basespider работает хорошо очищая все необходимые данные на первой странице:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from firstproject.items import xyz123
class MySpider(BaseSpider):
name = "xyz123test"
allowed_domains = ["xyz123.com.au"]
start_urls = ["http://www.xyz123.com.au/"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select('//div[@id="1234SearchResults"]//div/h2')
items = []
for titles in titles:
item = xyz123Item()
item ["title"] = titles.select("a/text()").extract()
item ["link"] = titles.select("a/@href").extract()
items.append(item)
return items
Извините за цензуру. Мне пришлось подвергать цензуре веб-сайт по соображениям конфиденциальности.
Первый код просканирует страницы так, как мне хотелось бы, чтобы он сканировал, однако он только тянет за первым заголовком и ссылкой. Примечание: XPath первого заголовка с помощью «проверить элемент» в гугле есть:
//*[@id="xyz123SearchResults"]/div[1]/h2/a
,
второй является //*[@id="xyz123SearchResults"]/div[2]/h2/a
третий //*[@id="xyz123SearchResults"]/div[3]/h2/a
и т.д.
Я не уверен, если DIV [п] бит что убивает его. Я надеюсь, что это легко исправить.
Благодаря
Отлично! Это был отпечаток! Все, что я сделал, было отступом, строка 'return items' осталась одной, и теперь она работает Спасибо – slixor