当我网页抓取时,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 抓取这个网页?返回空列表

使用 selenium 进行网络抓取返回空列表

Python爬虫怎么抓取html网页的代码块

抓取网页内容

屏幕抓取 Python 中基于 Javascript 的网页

[python 2.7抓取网页]如何抓取.js里面的内容(下拉框里面的中文字符列表)