Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮屑提取<;李>;内有跨度_Python_Scrapy_Python Requests_Scrapy Shell - Fatal编程技术网

Python 刮屑提取<;李>;内有跨度

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>

我试图从这个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>
            <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”)]
打印(数据)
#输出:['乌鸦黑','孔雀五彩',
#“斑鸠”、“麻雀棕”、“鹅斑鸠”、“鸵鸟斑鸠”]

只需使用XPath
string()


只需使用XPath
string()


我已经得到了和你一样的结果,我想要的是:
[‘乌鸦黑’、‘孔雀五彩’…],
而不是
[‘乌鸦’、‘黑’,…]
哦,我误解了。我的宝贝我已经得到了和你一样的结果,我想要的是:
[‘乌鸦黑’、‘孔雀五彩’…],
而不是
[‘乌鸦’、‘黑色’,…]
哦,我误解了。我的朋友,这是最好的方法!唯一的问题是输出列表混合了“单引号”和“双引号”,我甚至尝试在
bird=li.xpath('string(.)).get().replace('''','')
上运行replace,但没有做任何更改。除此之外,它是完美的。嗯。。。我不明白你从哪里得到的报价。你能展示你的输出吗?没那么重要,我只是得到了一个如下的列表:
[‘乌鸦黑’、‘孔雀多色’、‘鸽子多色’、‘麻雀棕’、‘鹅多色’、‘鸵鸟多色’]
。有些元素使用单引号,有些元素使用双引号,但工作正常。python对此表示不满。这是最好的办法!这是最好的方法!唯一的问题是输出列表混合了“单引号”和“双引号”,我甚至尝试在
bird=li.xpath('string(.)).get().replace('''','')
上运行replace,但没有做任何更改。除此之外,它是完美的。嗯。。。我不明白你从哪里得到的报价。你能展示你的输出吗?没那么重要,我只是得到了一个如下的列表:
[‘乌鸦黑’、‘孔雀多色’、‘鸽子多色’、‘麻雀棕’、‘鹅多色’、‘鸵鸟多色’]
。有些元素使用单引号,有些元素使用双引号,但工作正常。python对此表示不满。这是最好的办法!