我有一个make a scraper,它从嵌套数据的网站上获取数据,我的意思是,要进入数据页面,我必须单击5个链接,然后才能进入数据页面,在那里我可以获取数据
对于每一个第一页都有多个第2页对于每个第2页有许多第3页的,依此类推
所以这里我有一个解析函数来打开每个页面,直到找到包含数据的页面,并将数据添加到item类中并返回项目。在
但是它跳过了很多链接而没有抓取数据。在大约100个链接*之后,它不会执行最后一个parse_link函数。我怎么知道parse_link函数没有执行?在
这是因为我正在打印打印“\n\n”,“我被执行了!!!!”并且在100个左右的链接之后不会打印,但是每次代码都会执行parse_
我想知道的是我做得对吗?这是一个合适的方法来抓取这样的网站吗
这是密码
# -*- coding: utf-8 -*-
import scrapy
from urlparse import urljoin
from nothing.items import NothingItem
class Canana411Spider(scrapy.Spider):
name = "canana411"
allowed_domains = ["www.canada411.ca"]
start_urls = ['http://www.canada411.ca/']
def parse_next(self, response):
SET_SELECTOR = '.clearfix.c411Column.c411Column3 ul li'
for attr in response.css(SET_SELECTOR):
linkse = 'a ::attr(href)'
link = attr.css(linkse).extract_first()
link = urljoin(response.url, link)
yield scrapy.Request(link, callback=self.parse_more)
def parse_more(self, response):
SET_SELECTOR = '.clearfix.c411Column.c411Column3 ul li'
for attr in response.css(SET_SELECTOR):
linkse = 'a ::attr(href)'
link = attr.css(linkse).extract_first()
link = urljoin(response.url, link)
yield scrapy.Request(link, callback=self.parse_other)
def parse_other(self, response):
SET_SELECTOR = '.clearfix.c411Column.c411Column3 ul li'
for attr in response.css(SET_SELECTOR):
linkse = 'a ::attr(href)'
link = attr.css(linkse).extract_first()
link = urljoin(response.url, link)
yield scrapy.Request(link, callback=self.parse_then)
def parse_then(self, response):
SET_SELECTOR = '.c411Cities li h3 a ::attr(href)'
link = response.css(SET_SELECTOR).extract_first()
link = urljoin(response.url, link)
return scrapy.Request(link, callback=self.parse_link)
def parse_link(self, response):
print '\n\n', 'I AM EXECUTED !!!!'
item = NothingItem()
namese = '.vcard__name ::text'
addressse = '.c411Address.vcard__address ::text'
phse = 'span.vcard__label ::text'
item['name'] = response.css(namese).extract_first()
item['address'] = response.css(addressse).extract_first()
item['phone'] = response.css(phse).extract_first()
return item
我做得对吗,还是有更好的方法让我错过了?
如果没有冲突(例如,第一页不能包含选择器和指向第三页的链接,并且应该考虑除第二页或类似内容以外的任何页面),我建议将规则展平以提取链接。因此,一个
parse
就足够了。在相关问题 更多 >
编程相关推荐