python - 抓取网站以仅显示填充的类别
问题描述
我正在抓取一个网站,它会提取页面的内容,但是有些类别的标题在技术上是空的,但它仍然显示标题。我只想查看包含事件的类别。理想情况下,我什至可以拥有每个事务的组件,这样我就可以选择要显示的元素。
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
print('Scraping NH Dept of Banking...')
print()
NHurl = 'https://www.nh.gov/banking/corporate-activities/index.htm'
NHr = requests.get(NHurl, headers = headers)
NHsoup = BeautifulSoup(NHr.text, 'html.parser')
NHlist = []
for events in NHsoup.findAll('tr')[2:]:
print(events.text)
NHlist.append(events.text)
print(' '.join(NHlist))
就像我说的那样,这可以获取所有信息,但是有很多标题/空白空间不需要拉出。例如,在我写这篇文章的时候,'acquisitions'、'conversions'和'change in control'是空的,但标题仍然存在,并且在标题之后有相对较大的空白。我觉得我需要某种循环来遍历每个标题('td'),然后获取它的内容('tr'),但我不太确定该怎么做。
解决方案
您可以测试哪些行包含所有“\xa0”(显示为空白)并排除。我追加到列表并转换为熊猫数据框,但您可以直接打印该行。
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
r = requests.get('https://www.nh.gov/banking/corporate-activities/index.htm')
soup = bs(r.content, 'lxml')
results = []
for tr in soup.select('tr'):
row = [i.text for i in tr.select('th,td')]
if row.count('\xa0') != len(row):
results.append(row)
pd.set_option('display.width', 100)
df = pd.DataFrame(results)
df.style.set_properties(**{'text-align': 'left'})
df.columns = df.iloc[0]
df = df[1:]
df.fillna(value='', inplace=True)
print(df.head(20))
推荐阅读
- javascript - Mongoose 检索对象数组。对于每个对象,我只想要两个属性
- c - 将 char 数组传递给另一个函数时,Realloc 返回无效指针
- java - 在 Spring Boot 中连接到多个“动态”数据库以及本地“静态”数据库
- javascript - javascript - 在 html 标签中包装选择(并打开它)
- ios - 如何让我的 UICollectionViewCell 阴影渗入我的主视图?
- javascript - 使用单个三元运算符渲染多个组件
- windows - Perl 串口访问 [Windows 10]
- java - 尝试使用 java 代码编译和运行 c++ 代码
- zip - 在 nimlang 中读取 gzip 文件?
- excel - 在excel中保留单元格值