gpt4 book ai didi

python - Mechanize - 如何根据相邻标签选择链接?

转载 作者:行者123 更新时间:2023-12-04 16:20:35 26 4
gpt4 key购买 nike

我想解析一个搜索结果列表,并且只关注符合特定条件的结果的链接。

假设结果具有这样的结构:

<ul>
<li>
<div>
<!-- in here there is a list of information such as:
height: xx price: xx , and a link <a> to the page -->
</div>
</li>
<li>
<!-- next item -->
.
.
.

我想根据一组标准( height > x, price < x )来限定列表中的每个项目,如果项目匹配,请点击链接。

我需要如何引用作为另一个标签的子标签的标签(即作为第一个
  • 元素的子元素的元素)

    我很确定解决方案将沿着这些路线之一,但我不知道使用什么库和/或方法:

    1 - 使用一些库,我将列表解析为一个对象,以便我可以这样做:
    for item in list:
    if item['price'] < x:
    br.follow_link(item.link)

    2- 我寻找 html 响应,直到找到第一个“价格”文本,解析该值并对其进行限定,如果符合条件,请点击与 html 字符串该点相邻的链接(在我的情况下,链接出现在信息之前,所以我需要选择出现在匹配信息之前的链接。

    我可以想到一些 super 蛮力,低级别,这样做的方法,但我想知道是否有我可以使用的库或 Mechanize 方法。
    谢谢
  • 最佳答案

    您可以使用名为 BeautifulSoup 的库。 .这将是您使用 Beautiful Soup 解析时代码的大纲。

    假设你的 html 是:

    <ul>
    <li>
    <div>
    height: 10 price: 20
    <a href="google.com">
    </div>
    </li>
    <li>
    <div>
    height: 30 price: 40
    <a href="facebook.com">
    </div>
    </li>
    <li>
    <div>
    height: 50 price: 60
    <a href="stackoverflow.com">
    </div>
    </li>
    </ul>

    您要解析的代码是:
    from bs4 import BeautifulSoup

    # Read the input file. I am assuming the above html is part of test.html
    html = ""
    with open('test.html', 'r') as htmlfile:
    for line in htmlfile:
    html += line
    htmlfile.close()

    bs = BeautifulSoup(html)
    links_to_follow = []


    ul = bs.find('ul')
    for li in ul.find_all('li'):
    height = int(li.find('div').get_text().strip().split()[1])
    price = int(li.find('div').get_text().strip().split()[3])
    if height > 10 and price > 20: # I am assuming this to be the criteria
    links_to_follow.append(li.find('a').get('href'))

    print links_to_follow

    这给出:
    facebook.com
    stackoverflow.com

    关于python - Mechanize - 如何根据相邻标签选择链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185545/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com