python - 在循环期间抓取 html 时没有表格
问题描述
这里的第一个问题!
我正在抓取一个体育网页,该网页将每个运动员的个人资料页面组成为页面名称+“运动员的名字”+“-”+“运动员的姓氏”。我正在使用python。
我正在使用 requests 函数,因为它是 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)
推荐阅读
- android - 在颤振形式的sqlite数据库中,在列表视图中加载7000多个项目的内存有效方法是什么
- vue.js - 为什么用 vue-apollo 在两个独立组件之间共享组件数据?
- if-statement - 如何限制从另一列检索的列值
- r - 使用 NA 使 data.table 变得稀疏
- html - 如果我在没有时间值的情况下强制刷新页面,它会起作用吗
- mysql - Docker LAMP 镜像 mysql 连接问题
- excel - 将范围与单元格相乘
- python - 在 Swift 中编码时出现 Python 错误:意外缩进 (Xcode 11)
- r - R中的参数多元蒙特卡罗模拟
- c - `memcpy` 不会复制所有字节