XPATH/Python/Scrapy - 如何将文本附加到 href

XPATH/Python/Scrapy - How to append text to href

我正在使用带有 Python 的 Scrapy 来抓取页面。我的目标是:

1.Get 来自 a 标签的 href 值并附加 https:/careers.infinity.aero/ 在 href 值之前 2.Export 此列表到 csv 文件 3.Run 第二个脚本将那些 URL 用于另一个刮擦

我一直在尝试让 concat 为 XPATH 工作 - 我认为这是语法或 href 位置的断开连接,但我还没有很幸运找到任何可以帮助我的东西。

这是我得到的:

import scrapy
from scrapy.crawler import CrawlerProcess


class dgtest2(scrapy.Spider):
    name = "dgtest2"
    start_urls = [
    'https://careers.infinity.aero/Careers.aspx'
    ]

    custom_settings = {
    'FEED_FORMAT': 'csv',
    'FEED_URI': 'urls.csv'
    }

    def parse(self, response):
        url = response.xpath('concat( string("https://careers.infinity.aero/"), //a/@href)').getall()
        yield {
            'URL': url,
        }

process = CrawlerProcess()
process.crawl(dgtest2)
process.start()

我已经成功地从我的第二个脚本中的 csv 文件导入,我已经成功地使用以下方法提取 href

url = response.xpath('//a/@href').getall() 

并将其导出到 csv 文件,但 href 值只是部分 URL,这就是我需要追加的原因。

如有任何信息,我们将不胜感激。提前致谢!

要将 url 的两部分连接成一个,您可以使用标准库 urljoin 函数,也可以使用 scrapy 提供的便捷方法 response.urljoin .

使用响应对象

def parse(self, response):
        for url in response.xpath("//a/@href").getall():
            yield {
            'URL': response.urljoin(url),
            }

使用标准库(注意导入)

def parse(self, response):
        from urllib.parse import urljoin
        for url in response.xpath("//a/@href").getall():
            yield {
            'URL': urljoin("https:/careers.infinity.aero/", url),
            }