【问题标题】:Difficulty in making Python dictionary (xpath/CSS selector)制作 Python 字典的困难(xpath/CSS 选择器)
【发布时间】:2018-02-23 09:08:57
【问题描述】:

我有下面的代码,想将字典设为 {"100":"ABC"} 和 {"200":"DEF"}

<ul class="net">
    <li id="100">
        <a>ABC</a>
    </li>
    <li id="200">
        <a>DEF</a>
    </li>
</ul>

我尝试使用下面的代码,但我不知道如何在 xpath 属性中传递变量。

list_of_id = response.css('ul.net>li::attr(id)').extract()
for i in list_of_id:
    j = dict()
    j[i] = response.xpath('//ul/li[@id="i"]/a/text()').extract()

请帮忙。

【问题讨论】:

  • 字典为 {"100":"ABC"} 和 {"200":"DEF"}... 你想为每个 @987654323 制作单独的字典吗@ 或单个字典 {"100":"ABC", "200":"DEF"} ?请注意,在 for 循环内声明 j 意味着您将仅在 list_of_id 中获得最后一个 i 的字典
  • @Andersson:我想为每个 i 制作单独的字典。请帮忙

标签: css python-2.7 xpath scrapy-spider


【解决方案1】:

改变这个:

j[i] = response.xpath('//ul/li[@id="i"]/a/text()').extract()

到这里:

j[i] = response.xpath("//ul/li[@id="+i+"]/a/text()").extract()

【讨论】:

    【解决方案2】:

    您可以使用选择器来达到目的。试一试:

    html='''
    <ul class="net">
        <li id="100">
            <a>ABC</a>
        </li>
        <li id="200">
            <a>DEF</a>
        </li>
    </ul>
    '''
    
    from lxml.html import fromstring
    tree = fromstring(html)
    for item in tree.cssselect(".net li"):
        num = item.attrib['id']
        name = item.cssselect("a")[0].text
        item={num:name} 
        print(item)
    

    结果:

    {'100': 'ABC'}
    {'200': 'DEF'}
    

    【讨论】:

    • 谢谢!我想在除空格之外的每个字符后添加一个符号。我尝试了以下但无法成功。请帮助 name = "ABC XYZ" x=raw_input("输入符号") print '{0}'.format(x).join(a for a in name if a!=0)
    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2012-05-28
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多