Python 3.x 删除嵌套数据并将其插入单个数组

Python 3.x 删除嵌套数据并将其插入单个数组,python-3.x,scrapy,Python 3.x,Scrapy,我有以下HTML结构: 第一 最后 第二 最后 新的 最新的 之所以如此,是因为您从“ul li”中提取html。然后您尝试运行“html”.css()。您必须删除为循环准备“list”变量的“.extract()”。像这样: from scrapy.selector import Selector with open('input.html') as fd: content = fd.read() response = Selector(text=content)

我有以下HTML结构:

  • 第一 最后
  • 第二 最后
  • 新的 最新的

之所以如此,是因为您从“ul li”中提取html。然后您尝试运行“html”.css()。您必须删除为循环准备“list”变量的“.extract()”。像这样:

from scrapy.selector import Selector

with open('input.html') as fd:
    content = fd.read()

response = Selector(text=content)

data = {}
list = response.css('ul li')
for li in list:
    key = li.css('div.LastDiv::text').extract_first()

    if key not in data:
        data[key] = []

    data[key].append(li.css('div > h3::text').extract_first())

print(data)

这是因为你从ulli中提取html。然后您尝试运行“html”.css()。您必须删除为循环准备“list”变量的“.extract()”。像这样:

from scrapy.selector import Selector

with open('input.html') as fd:
    content = fd.read()

response = Selector(text=content)

data = {}
list = response.css('ul li')
for li in list:
    key = li.css('div.LastDiv::text').extract_first()

    if key not in data:
        data[key] = []

    data[key].append(li.css('div > h3::text').extract_first())

print(data)

奥列格·T.的回答是不完整的
data
是一个字典,要求键实现SelectorList没有实现的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这就是你犯这个错误的原因

正确的解决方案是:

#!/usr/bin/env python3

import collections
from scrapy.selector import Selector

with open('input.html') as fd:
    content = fd.read()

response = Selector(text=content)

data = collections.defaultdict(list)
lst = response.css('ul li') #.extract()
for li in lst:
    key = li.css('div.LastDiv::text')[0].extract()
    data[key].append(li.css('div > h3::text')[0].extract())

print(dict(data))
其中
input.html
是包含问题中html片段的文件。这将打印您要查找的内容:

{'TheLast': ['TheFirst', 'TheSecond'], 'TheLastNew': ['TheNew']}

奥列格·T.的回答是不完整的
data
是一个字典,要求键实现SelectorList没有实现的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这就是你犯这个错误的原因

正确的解决方案是:

#!/usr/bin/env python3

import collections
from scrapy.selector import Selector

with open('input.html') as fd:
    content = fd.read()

response = Selector(text=content)

data = collections.defaultdict(list)
lst = response.css('ul li') #.extract()
for li in lst:
    key = li.css('div.LastDiv::text')[0].extract()
    data[key].append(li.css('div > h3::text')[0].extract())

print(dict(data))
其中
input.html
是包含问题中html片段的文件。这将打印您要查找的内容:

{'TheLast': ['TheFirst', 'TheSecond'], 'TheLastNew': ['TheNew']}

错误是否发生在
response.css
li.css
行中?是否可以添加错误堆栈跟踪?您还可以粘贴
列表的结果吗
@MithunArunan结果是
li
像这样的部分
  • 第一个
  • 第二个
  • 最后一个
  • 新的
  • @meisterluk它出现在
    数据[li.css]的部分('div.LastDiv::text)].append(li.css('div>h3::text'))
    我们需要更多信息。更新您的问题并包括类型和str()变量的表示法
    list
    li
    。并修复示例代码。字符串未终止。错误是否发生在
    response.css
    li.css
    的行中?是否可以添加错误堆栈跟踪?是否还可以粘贴
    list
    @MithunArunan的结果?结果是
    li
    部分它是这样的,第一个最后一个,第二个最后一个,第二个新的,它出现在数据[li.css('div.LastDiv::text)]的一部分。追加(li.css('div>h3::text'))
    我们需要更多信息。请更新您的问题,包括变量的类型和str()表示形式
    列表
    li
    。并修复示例代码。字符串未终止。收到此错误
    回溯(最近一次调用):文件“”,第2行,在TypeError:Unhabable类型中:“SelectorList”
    非常感谢您对meisterluk的回复。我只修复您提供给我的错误。如果我在我身边运行它并修复将来的问题会更好。我使用meisterluk的部分代码编辑了我的代码。得到此错误
    回溯(最近一次调用):文件“”,第2行,在TypeError:Unhabable类型中:“SelectorList”
    非常感谢您对meisterluk的回复。我只修复了您提供给我的错误。如果我在我身边运行它并修复将来的问题,会更好。我使用meisterluk的部分代码编辑了我的代码。