Python 刮屑提取<;李>;内有跨度
我试图从这个html结构中提取文本:Python 刮屑提取<;李>;内有跨度,python,scrapy,python-requests,scrapy-shell,Python,Scrapy,Python Requests,Scrapy Shell,我试图从这个html结构中提取文本: <div class="col-6 col-lg-3"> <span class="font-weight-bold">List of Birds</span> <ul class="bird-forms"> <li>Crow <span class="color">Black</span></li>
<div class="col-6 col-lg-3">
<span class="font-weight-bold">List of Birds</span>
<ul class="bird-forms">
<li>Crow <span class="color">Black</span></li>
<li>Peacock <span class="color">Multicolored</span></li>
<li>Dove <span class="color">Multicolored</span></li>
<li>Sparrow <span class="color">Brown</span></li>
<li>Goose <span class="color">Multicolored</span></li>
<li>Ostrich <span class="color">Multicolored</span></li>
</ul>
</div>
而不是这个:
['Crow Black',
'Peacock Multicolored',
'Dove Multicolored',
'Sparrow Brown',
'Goose Multicolored',
'Ostrich Multicolored']
['Crow',
'Black',
'Peacock',
'Multicolored',
'Dove',
'Multicolored',
'Sparrow',
'Brown',
'Goose',
'Multicolored',
'Ostrich',
'Multicolored']
我们可以单独提取细节,并在以下情况下合并它们:
li_tags = response.xpath(".//ul[@class='bird-forms']//li/text()").extract()
color_tags = response.xpath(".//ul[@class='bird-forms']//span[@class='color']/text()").extract()
[" ".join(entry) for entry in zip(li_tags, color_tags)]
['Crow Black',
'Peacock Multicolored',
'Dove Multicolored',
'Sparrow Brown',
'Goose Multicolored',
'Ostrich Multicolored']
我们可以单独提取细节,并在以下情况下合并它们:
li_tags = response.xpath(".//ul[@class='bird-forms']//li/text()").extract()
color_tags = response.xpath(".//ul[@class='bird-forms']//span[@class='color']/text()").extract()
[" ".join(entry) for entry in zip(li_tags, color_tags)]
['Crow Black',
'Peacock Multicolored',
'Dove Multicolored',
'Sparrow Brown',
'Goose Multicolored',
'Ostrich Multicolored']
您需要先分别选择
li
标记,然后为每个li
标记另外选择文本:
data = []
for li_tag in response.css("ul.bird-forms li"):
data.append(" ".join(li_tag.css("*::text").extract()))
与python列表理解相同:
data = [" ".join(x.css("*::text").extract()) for x in response.css("ul.bird-forms li")]
print(data)
# output <class 'list'>: ['Crow Black', 'Peacock Multicolored',
# 'Dove Multicolored', 'Sparrow Brown', 'Goose Multicolored', 'Ostrich Multicolored']
data=[“”.join(x.css(“*::text”).extract())for x in response.css(“ul.bird-forms li”)]
打印(数据)
#输出:['乌鸦黑','孔雀五彩',
#“斑鸠”、“麻雀棕”、“鹅斑鸠”、“鸵鸟斑鸠”]
您需要先分别选择li
标记,然后为每个li
标记选择文本:
data = []
for li_tag in response.css("ul.bird-forms li"):
data.append(" ".join(li_tag.css("*::text").extract()))
与python列表理解相同:
data = [" ".join(x.css("*::text").extract()) for x in response.css("ul.bird-forms li")]
print(data)
# output <class 'list'>: ['Crow Black', 'Peacock Multicolored',
# 'Dove Multicolored', 'Sparrow Brown', 'Goose Multicolored', 'Ostrich Multicolored']
data=[“”.join(x.css(“*::text”).extract())for x in response.css(“ul.bird-forms li”)]
打印(数据)
#输出:['乌鸦黑','孔雀五彩',
#“斑鸠”、“麻雀棕”、“鹅斑鸠”、“鸵鸟斑鸠”]
只需使用XPathstring()
:
只需使用XPath
string()
:
我已经得到了和你一样的结果,我想要的是:
[‘乌鸦黑’、‘孔雀五彩’…],
而不是[‘乌鸦’、‘黑’,…]
哦,我误解了。我的宝贝我已经得到了和你一样的结果,我想要的是:[‘乌鸦黑’、‘孔雀五彩’…],
而不是[‘乌鸦’、‘黑色’,…]
哦,我误解了。我的朋友,这是最好的方法!唯一的问题是输出列表混合了“单引号”和“双引号”,我甚至尝试在bird=li.xpath('string(.)).get().replace('''','')
上运行replace,但没有做任何更改。除此之外,它是完美的。嗯。。。我不明白你从哪里得到的报价。你能展示你的输出吗?没那么重要,我只是得到了一个如下的列表:[‘乌鸦黑’、‘孔雀多色’、‘鸽子多色’、‘麻雀棕’、‘鹅多色’、‘鸵鸟多色’]
。有些元素使用单引号,有些元素使用双引号,但工作正常。python对此表示不满。这是最好的办法!这是最好的方法!唯一的问题是输出列表混合了“单引号”和“双引号”,我甚至尝试在bird=li.xpath('string(.)).get().replace('''','')
上运行replace,但没有做任何更改。除此之外,它是完美的。嗯。。。我不明白你从哪里得到的报价。你能展示你的输出吗?没那么重要,我只是得到了一个如下的列表:[‘乌鸦黑’、‘孔雀多色’、‘鸽子多色’、‘麻雀棕’、‘鹅多色’、‘鸵鸟多色’]
。有些元素使用单引号,有些元素使用双引号,但工作正常。python对此表示不满。这是最好的办法!