代码之家  ›  专栏  ›  技术社区  ›  MelaniaCB

使用下载url+“href”创建元组列表

  •  0
  • MelaniaCB  · 技术社区  · 3 年前

    我试图制作一个元组列表,第一个元素是下载URL,第二个元素是URL字符串中的文件名,代码如下:

    import urllib
    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    import io
    url = r"https://www.ers.usda.gov/data-products/livestock-meat-domestic-data"
    my_bytes = urllib.request.urlopen(url)
    my_bytes = my_bytes.read().decode("utf8")
    parsed_html = BeautifulSoup(my_bytes, features = "lxml")
    table_data = parsed_html.body.find('table', attrs = {'id':'data_table'})
    download_url = "https://www.ers.usda.gov"
    full_download_url = [tuple(download_url,i["href"]) for i in table_data.find_all('a')]
    

    但我一直在 TypeError: must be str, not list 一直以来,我都不知道如何解决这个问题,请帮忙?谢谢

    1 回复  |  直到 3 年前
        1
  •  0
  •   CoderWithADream    3 年前

    您错误地访问了 download_url 数组索引。

    Python将代码解释为使用一个元素创建数组 [0] 什么时候 i 是 例如0,然后尝试访问该元素 ["href"] 这是一个字符串,不是有效的索引

    如果你指定 下载网址 在访问索引之前,它将按预期工作

    full_download_url = [(download_url, download_url[i]["href"]) for i in table_data.find_all('a')]
    
        2
  •  0
  •   MelaniaCB    3 年前

    这就是我需要的:

    import urllib
    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    import io
    url = r"https://www.ers.usda.gov/data-products/livestock-meat-domestic-data"
    my_bytes = urllib.request.urlopen(url)
    my_bytes = my_bytes.read().decode("utf8")
    parsed_html = BeautifulSoup(my_bytes, features = "lxml")
    table_data = parsed_html.body.find('table', attrs = {'id':'data_table'})
    download_url = "https://www.ers.usda.gov"
    def convertTuple(tup):
        str = ''
        for item in tup:
            str = str + item
        return str
    full_download_url = [convertTuple(tuple(download_url + i["href"])) for i in table_data.find_all('a')]
    

    幸亏 Geeks for geeks 所有想帮忙的人:)

    推荐文章