我是新手使用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 /".
等链接答案 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值,您需要添加索引号。
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]}