如何修改我的代码来刮掉这些链接?

时间:2016-09-28 18:44:42

标签: python scrapy

我是新手使用python scrapy,我的scrapy版本是1.1.3。我想在this part上的https://www.wikipedia.org/中获取一个链接列表。我应该如何修改我的代码?

import scrapy

class LinkSpider(scrapy.Spider):
    name = "links"
    start_urls = [
        'https://www.wikipedia.org/',
    ]

    def parse(self, response):
        for link in response.xpath('//div/ul/li/a'): 
            yield{
                'link': link.extract()
            }

上面是我的项目文件夹/ spiders / spiders.py

中的代码

我得到的是

[
{"link": "<a href=\"//de.wikipedia.org/\" lang=\"de\">Deutsch</a>"},
{"link": "<a href=\"//en.wikipedia.org/\" lang=\"en\" title=\"English\">English</a>"},
{"link": "<a href=\"//es.wikipedia.org/\" lang=\"es\">Espa\u00f1ol</a>"},
{"link": "<a href=\"//fr.wikipedia.org/\" lang=\"fr\">Fran\u00e7ais</a>"},
{"link": "<a href=\"//it.wikipedia.org/\" lang=\"it\">Italiano</a>"},
{"link": "<a href=\"//nl.wikipedia.org/\" lang=\"nl\">Nederlands</a>"},
{"link": "<a href=\"//ja.wikipedia.org/\" lang=\"ja\" title=\"Nihongo\">\u65e5\u672c\u8a9e</a>"},
{"link": "<a href=\"//pl.wikipedia.org/\" lang=\"pl\">Polski</a>"},
{"link": "<a href=\"//ru.wikipedia.org/\" lang=\"ru\" title=\"Russkiy\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439</a>"},
{"link": "<a href=\"//ceb.wikipedia.org/\" lang=\"ceb\">Sinugboanong Binisaya</a>"}
]

我希望列表之类的内容只包含“//de.wikipedia.org /".

等链接

2 个答案:

答案 0 :(得分:0)

您需要修改xpath查询以获取属性的值而不是标记

import scrapy

class LinkSpider(scrapy.Spider):
    name = "links"
    start_urls = [
        'https://www.wikipedia.org/',
    ]

    def parse(self, response):
        for link in response.xpath('//div/ul/li/a/@href'): 
            yield{
                'link': link.extract()
            }

答案 1 :(得分:0)

你遗失了几件事,

  • 您需要添加属性@href才能获取值
  • 您的第一个索引上的href值,您需要添加索引号。

    import scrapy
    class LinkSpider(scrapy.Spider):
        name = "links"
        start_urls = ['https://www.wikipedia.org/', ]
    
        def parse(self, response):
            for link in response.xpath('//div/ul/li/a/@href'):
                yield{'link': link.extract()[0]}