【问题标题】:How to loop through a list of urls in python for web scraping如何遍历python中的url列表以进行网络抓取
【发布时间】:2021-09-05 14:39:28
【问题描述】:

对 python 非常陌生,并且在这个循环中苦苦挣扎。我正在尝试从我已经拥有的列表格式的静态页面列表中提取 html 属性数据地址。我已经设法使用 BS4 从一页中提取数据,但我无法正确地循环遍历我的 URL 列表。现在我收到此错误(无效的 URL '0':未提供架构。也许您的意思是 http://0?)但我在单次拉取中检查了 URL,它们都可以工作。这是我的工作单拉代码:

import requests
from bs4 import BeautifulSoup

result = requests.get('https://www.coingecko.com/en/coins/0xcharts')
src = result.content
soup = BeautifulSoup(src, 'lxml')

contract_address = soup.find(
    'i', attrs={'data-title': 'Click to copy'})

print(contract_address.attrs['data-address'])

这是我正在处理的循环:

import requests
from bs4 import BeautifulSoup

url_list = ['https://www.coingecko.com/en/coins/2goshi','https://www.coingecko.com/en/coins/0xcharts']

for link in range(len(url_list)):
    result = requests.get(link)
    src = result.content
    soup = BeautifulSoup(src, 'lxml')

    contract_address = soup.find(
    'i', attrs={'data-title': 'Click to copy'})

    print(contract_address.attrs['data-address'])

url_list.seek(0)

【问题讨论】:

    标签: python python-3.x list web-scraping beautifulsoup


    【解决方案1】:

    试试看。

    import requests
    from bs4 import BeautifulSoup
    
    url_list = ['https://www.coingecko.com/en/coins/2goshi','https://www.coingecko.com/en/coins/0xcharts']
    
    for link in url_list:
        result = requests.get(link)
        src = result.content
        soup = BeautifulSoup(src, 'lxml')
    
        contract_address = soup.find(
        'i', attrs={'data-title': 'Click to copy'})
    
        print(contract_address.attrs['data-address'])
    
    url_list.seek(0)
    

    【讨论】:

    • 谢谢!这很有效,感谢您的帮助。
    【解决方案2】:

    您误解了range() 的用法。请阅读docs

    当你这样做时:

    result = requests.get(link)
    

    link 是一个来自range()int 值,看看print(link) 会发生什么。 相反,访问列表url_list,如下所示:

    result = requests.get(url_list[link])
    

    这是一个完整的例子:

    import requests
    from bs4 import BeautifulSoup
    
    url_list = ['https://www.coingecko.com/en/coins/2goshi','https://www.coingecko.com/en/coins/0xcharts']
    
    for link in range(len(url_list)):
    
    
        result = requests.get(url_list[link])
        src = result.content
        soup = BeautifulSoup(src, 'lxml')
    
        contract_address = soup.find(
        'i', attrs={'data-title': 'Click to copy'})
    
        print(contract_address.attrs['data-address'])
    

    输出:

    0x70e132641d6f1bd787b119a289fee544fbb2f316
    0x86dd49963fe91f0e5bc95d171ff27ea996c0890c
    

    【讨论】:

    • 感谢您的解释,这也很有效。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多