簡體   English   中英

在循環期間刮取 html 時沒有表格

[英]No table when scraping an html during a loop

這里的第一個問題!

我正在抓取一個體育網頁,該網頁將每個運動員的個人資料頁面組成為頁面名稱+“運動員的名字”+“-”+“運動員的姓氏”。 我正在使用 python。

我正在使用請求 function 並且因為它是 https 類型 url,所以我正在運行下面的代碼。 我想抓取頁面以查找每個運動員的 W/L 比率、首選獲勝方法等。我發現的問題是,無論出於何種原因,該頁面都沒有每個運動員的個人資料以及反映他們職業生涯的表格,只有一些運動員這樣做。

import requests
my_header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" }
html_page_text = requests.get('https://www.bjjheroes.com/a-z-bjj-fighters-list',my_header)
all_athletes = pd.read_html(html_page_text.text);

for i in range(len(all_athletes)):
    url=('https://www.bjjheroes.com/bjj-fighters/' + table_heroes[0]['First Name'][i].lower() + '-' + 
         table_heroes[0]['Last Name'][i].lower())
    request = requests.get(url)

if request.status_code == 200:
    my_header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 
                 Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" }
    html_page_text = requests.get(url,my_header)
    table_heroes.append(pd.read_html(html_page_text.text))

所以我已經提取了每個運動員姓名的列表(稱為 all_athletes),我正在運行一個循環來組成姓名以進入他們的網站並從表格中提取數據,但有些運動員的身上沒有任何東西頁面,所以當我瀏覽列表時,錯誤會不斷彈出,我必須逐個運動員手動將它們取出。

有沒有辦法在運行代碼之前檢查網站是否有表格以避免錯誤?

使用 try/except。 我還在代碼中修復了一些其他的小東西:

import requests
import pandas as pd

my_header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" }
html_page_text = requests.get('https://www.bjjheroes.com/a-z-bjj-fighters-list',my_header)
all_athletes = pd.read_html(html_page_text.text)[0]

table_heroes = pd.DataFrame()
for idx, row in all_athletes.iterrows():
    url=('https://www.bjjheroes.com/bjj-fighters/' + row['First Name'].lower() + '-' + row['Last Name'].lower())
    request = requests.get(url, my_header)

    try:
        html_page_text = requests.get(url,my_header)
        temp_df = pd.read_html(html_page_text.text)[0]
        temp_df['Athlete'] = row['First Name'] + ' ' + row['Last Name']
        table_heroes = table_heroes.append(temp_df, sort=False)
        print('Collected: %s %s' %(row['First Name'],row['Last Name']))

    except Exception as e:
        print(e)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM