【问题标题】:How do I fill empty records from scraping Python?如何从抓取 Python 中填充空记录?
【发布时间】:2020-07-01 16:52:19
【问题描述】:
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
r = requests.get('https://www.transfermarkt.com.br/esporte-clube-bahia/kader/verein/10010/saison_id/2019/plus/1', headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
impar = soup.find('table',{'class':'items'}).find_all('tr',{'class':'odd'})

bahia = []

for jog in impar:
    nome = jog.find_all('tr')[0].img.get('alt')
    posicao = jog.find_all('td',{'class':"zentriert"})[0].get('title')
    idade = jog.find_all('td',{'class':"zentriert"})[1].text
    nacionalidade = jog.find_all('td',{'class':"zentriert"})[2].img.get('alt')
    altura = jog.find_all('td',{'class':"zentriert"})[3].text[0:-2]
    pe = jog.find_all('td',{'class':"zentriert"})[4].text
    desde =jog.find_all('td',{'class':"zentriert"})[5].text
    clube_anterior = jog.find_all('td',{'class':'zentriert'})[6].img.get('alt')
    preco_pago = jog.find_all('td',{'class':"zentriert"})[6].get('title')
    contrato = jog.find_all('td',{'class':"zentriert"})[7].text
    valor = jog.find('td',{'class':"rechts hauptlink"}).text[0:-4]
    bahia.append((nome,posicao,idade,nacionalidade,altura,pe,desde,clube_anterior,preco_pago,contrato,valor))

我的问题是,我从中抓取的列表中的某些元素没有属性“clube_anterior”。当我尝试impar[7].find_all('td',{'class':"zentriert"})[6] 时,我得到<td class="zentriert"></td> 然后当我执行impar[7].find_all('td',{'class':"zentriert"})[6].img.get('alt') 时,我得到一个错误( @ 987654325@,但这段代码适用于我的大部分记录......无论如何我可以跳过产生这个错误的记录或者用 NaN 或 None 填充?

【问题讨论】:

  • 为了更清楚,另一方面,当我做impar[1].find_all('td',{'class':"zentriert"})[6] 时,我得到<td class="zentriert"><a class="vereinprofil_tooltip" href="/sc-internacional-porto-alegre/startseite/verein/6600/saison_id/2018" id="6600"><img alt="SC Internacional Porto Alegre" class="" src="https://tmssl.akamaized.net/images/wappen/verysmall/6600.png?lm=1412878908" title=": Ablöse custo zero"/></a></td> 所以我可以申请impar[1].find_all('td',{'class':"zentriert"})[6].img.get('alt') 并且不会出错
  • 请将您的附加评论移到您的 Q 正文中,并考虑编辑您的 Q,以便您讲述故事的最简单版本(尚未完成),而无需进行旁白。祝你好运!

标签: python web-scraping beautifulsoup request


【解决方案1】:

将访问权限封装在try: except AttributeError:中。

您还无缘无故地一遍又一遍地重新查询 TD;我也重构了:

for jog in impar:
    nome = jog.find_all("tr")[0].img.get("alt")
    tds = jog.find_all("td", {"class": "zentriert"})
    posicao = tds[0].get("title")
    idade = tds[1].text
    nacionalidade = tds[2].img.get("alt")
    altura = tds[3].text[0:-2]
    pe = tds[4].text
    desde = tds[5].text
    try:
        clube_anterior = tds[6].img.get("alt")
    except AttributeError:
        clube_anterior = None
    preco_pago = tds[6].get("title")
    contrato = tds[7].text
    valor = jog.find("td", {"class": "rechts hauptlink"}).text[0:-4]
    bahia.append(
        (
            nome,
            posicao,
            idade,
            nacionalidade,
            altura,
            pe,
            desde,
            clube_anterior,
            preco_pago,
            contrato,
            valor,
        )
    )

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2021-05-10
    相关资源
    最近更新 更多