Python从嵌套页中刮取数据

2024-10-01 19:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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/']

第1页

^{pr2}$

第2页

    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)

第3页

    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)

第4页

    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)

第5页

    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)

第6页数据页

    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

我做得对吗,还是有更好的方法让我错过了?


Tags: 数据selfparseresponselinkextractitemselector
1条回答
网友
1楼 · 发布于 2024-10-01 19:21:07

如果没有冲突(例如,第一页不能包含选择器和指向第三页的链接,并且应该考虑除第二页或类似内容以外的任何页面),我建议将规则展平以提取链接。因此,一个parse就足够了。在

相关问题 更多 >

    热门问题