python - 获取与 Beautiful Soup 的字符串列表中的字符串匹配的 HTML href 链接

标签 python html web-scraping beautifulsoup

我正在尝试从具有 url 列表的网页获取 url。我不想获取所有网址,只想获取文本与列表中字符串文本匹配的网址。字符串列表是网页上链接文本的子集,是我通过抓取页面并删除不需要的文本来提取的。我有一个存储在文件名中的字符串列表。

我正在尝试提取列表中包含字符串的链接。下面返回一个空列表

 r = requests.get(url)

    soup = BeautifulSoup(r.content, 'html5lib')
    
    links = soup.findAll('a', string = filenames[0])
    
    file_links = [link['href'] for link in links if "export" in link['href']]

标签看起来像这样:

<p><a href="https://drive.google.com/uc?export=download&id=1wVjbdN9fztrjxhONGRX5U6N1OJDAChOi">
                            ECZ Mathematics Paper 2 2019.</a></p>

<p><a href="https://drive.google.com/uc?export=download&id=1x_9E3PaviCuSsqfJqOsQKOwVlCWZ1jqf">
                            ECZ Mathematics Paper 1 2019.</a></p>

<p><a href="https://drive.google.com/uc?export=download&id=1QFOzpPLuQPup8FtKgOoIcvzTnzCaRzUp">
                            ECZ Science Paper 3 2009.</a></p>

<p><a href="https://drive.google.com/uc?export=download&id=0B0lFc6TrfIg7aENYc1V6akRVVnc">
                            ECZ Civic Education Paper 2 2009.</a></p>

我想获取前三个的 href 链接,但不是最后一个,因为字符串 'ECZ Civic Education Paper 2 2009.' 不是我的字符串列表的一部分。网站链接为 here

我的字符串列表如下所示:


filenames = ['ECZ Mathematics Paper 2 2019.', 'ECZ Mathematics Paper 2 2019.',
             'ECZ Science Paper 3 2009.']

我只想要前三个链接,因为链接的文本在我的列表(文件名)中。我不需要第四个链接,因为 href 链接旁边的文本 (ECZ Civic Education Paper 2 2009.) 不在我的列表中,因为我不想下载此文件。

最佳答案

尝试一下这个方法,看看是否有效:

   html = """    
    <p><a href="https://drive.google.com/uc?export=download&id=1wVjbdN9fztrjxhONGRX5U6N1OJDAChOi">
                                ECZ Mathematics Paper 2 2019.</a></p>    
    <p><a href="https://drive.google.com/uc?export=download&id=1x_9E3PaviCuSsqfJqOsQKOwVlCWZ1jqf">
                                ECZ Mathematics Paper 1 2019.</a></p>    
    <p><a href="https://drive.google.com/uc?export=download&id=1QFOzpPLuQPup8FtKgOoIcvzTnzCaRzUp">
                                ECZ Science Paper 3 2009.</a></p>    
    <p><a href="https://drive.google.com/uc?export=download&id=0B0lFc6TrfIg7aENYc1V6akRVVnc">
                                ECZ Civic Education Paper 2 2009.</a></p>   
   """
    filenames = ['ECZ Mathematics Paper 2 2019.', 'ECZ Mathematics Paper 2 2019.',
                 'ECZ Science Paper 3 2009.']

    soup = bs(html, 'html5lib')

    all_links = soup.findAll('a')

    for link in all_links:           
        for nam in filenames:                
            if link.text.strip()==nam:
                print(link['href'])

输出:

https://drive.google.com/uc?export=download&id=1wVjbdN9fztrjxhONGRX5U6N1OJDAChOi
https://drive.google.com/uc?export=download&id=1wVjbdN9fztrjxhONGRX5U6N1OJDAChOi
https://drive.google.com/uc?export=download&id=1QFOzpPLuQPup8FtKgOoIcvzTnzCaRzUp

关于python - 获取与 Beautiful Soup 的字符串列表中的字符串匹配的 HTML href 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59620715/

相关文章:

c# - 抓取时防止警告消息

python - 要求使用默认 key 进行 gpg 签名的密码的脚本

python - 如何从 session 查询中获取倒数第二条记录

python - 在 Gtk TreeView 树中显示图标或颜色

javascript - Save() 和 Restore() 函数不起作用?

html - 证明内容不适用于自动边距

html - 选择嵌套在 div 层中的标签

python请求: (SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)'))

web-scraping - 如何使用 iMacros 从元素中提取属性值?

Python beautifulsoup - 获取输入值