当我网页抓取时,TD列表变为空
Posted
技术标签:
【中文标题】当我网页抓取时,TD列表变为空【英文标题】:TD list turn empty when I web scraping 【发布时间】:2021-10-01 14:21:39 【问题描述】:我尝试从官方银行业数据中获取一些每周数据。然而,即使代码正常工作,列表也是一个空列表。
我的python代码如下:
import requests
from bs4 import BeautifulSoup
import urllib.request
url="http://www.bddk.org.tr/BultenHaftalik"
r=requests.get(url)
html_content=r.text
soup=BeautifulSoup(html_content,"html.parser")
veri_tablosu=soup.find('table', class_='table table-bordered table-condensed verigostermetablosu responsive-table')
for veri in veri_tablosu.find_all('tbody'):
rows=veri.find_all('tr')
for row in rows:
basliklar=row.find('td', class_= 'ortala')
print(basliklar)
【问题讨论】:
【参考方案1】:beautifulsoup 似乎无法找到 <tbody>
并返回 None
而不是正文元素列表。
虽然你可以尝试直接从表中提取<tr>
veri_tablosu=soup.find('table', class_='table table-bordered table-condensed verigostermetablosu responsive-table')
for row in veri_tablosu.find_all('tr'):
basliklar=row.find('td', class_= 'ortala')
print(basliklar)
【讨论】:
【参考方案2】:问题是 tobdy 不在源 html 中,因此您不能使用 find_all('tbody')
。
只需使用for veri in veri_tablosu.find_all('tr')
。
【讨论】:
【参考方案3】:这是因为<tbody>
不存在于soup
中。所以你得到一个空的结果。
不使用<tbody>
,您可以直接选择<tr>
名称为satir 的行<tr>
(因为那是数据所在的位置)并提取您需要的数据。
代码如下所示:
basliklar = []
for veri in veri_tablosu.findAll('tr', class_='satir'):
basliklar.append(veri.find('td', class_= 'ortala').text)
print(basliklar)
Output
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20']
【讨论】:
以上是关于当我网页抓取时,TD列表变为空的主要内容,如果未能解决你的问题,请参考以下文章
如何用 Python 和 lxml 抓取这个网页?返回空列表