【问题标题】:How to Scrape Inner level url using scrapy?如何使用scrapy刮掉内部级别的网址?
【发布时间】:2019-04-14 12:55:50
【问题描述】:

我创建了一个爬虫,正在观看一些在线视频。它从网站上抓取个人资料网址。我想将其扩展到 scrape 数据,如地址、姓名、电话、网站 url 从每个被抓取的个人资料 url 中。

我正在考虑创建分离刮板。一种用于抓取 Profile url。第二个从抓取的第一个 url 中抓取数据。

还有其他解决办法吗?

这是我的抓取配置文件网址的蜘蛛。

# -*- coding: utf-8 -*-
import scrapy
from ..items import ...scraperItem

class SpiderSpider(scrapy.Spider):
    name = 'spider'
    start_urls = ['https:// ...']
    page_number = 15

    def parse(self, response):
        items=...scraperItem()
       ..._url=response.css('a.header-5.text-unbold ::attr(href)').extract_first()

        items['..._url']= ..._url
        yield items
        next_page = 'https:/...'+str(...SpiderSpider.page_number)
        if ...SpiderSpider.page_number <= 150:
            ...SpiderSpider.page_number += 15
            yield response.follow(next_page, callback = self.parse)

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    您可以添加另一个解析方法(例如parse_profile)来抓取额外的数据。例如

    def parse(self, response):
        url = response.css('a.header-5.text-unbold ::attr(href)').extract_first()
    
        yield response.follow(url, callback=self.parse_profile)
    
        # next_page = ...
        if self.page_number <= 150:
            self.page_number += 15
            yield response.follow(next_page, callback=self.parse)
    
    def parse_profile(self, response)
        item = HouzzscraperItem()
        item['houzz_url'] = response.url
        # item['address'] = ...
        # item['name'] = ...
        # item['phone'] = ...
        yield item
    

    【讨论】:

    • 谢谢。那三个点……是什么意思?
    • 这意味着您需要使用有效的代码来完成 :)
    • 不用担心。你已经弄清楚了那部分。关于你的错误,我无法看到整个事情。你能把它粘贴到一个文本工具中,比如 pastebin.org 吗?
    • 哦,现在我看到 parseparse_profile 没有正确缩进。似乎它们属于类外的范围。通过缩进它们的defs 与page_number 属性对齐,将它们都放在里面。
    • 我明白了。因为extract_first,它每页只抓取一个配置文件。遍历extract() 然后你会得到所有的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2014-09-12
    • 2015-04-02
    • 2021-02-05
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多