python - 忽略 td beautifulsoup 中的 N/A 值
问题描述
我想删除同一类的 td 中的 N/A 值
<td align="left" class="category"> N/A</td>
<td align="left" class="title"> <a href="article-feb-0243.html">Wall Street cool to eBay's profit</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2017.html">Warnings about junk mail deluge</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2660.html">Web radio takes Spanish rap global</a></td>
<td align="left" class="category"> sport</td>
我想同时抓取类别和标题,但在类别中要忽略 N/A 值
for td in parsed_html.body.findAll('td',{"class":lambda class_: class_ in ("category","title")}):
print(td)
category=td.parent.find("td",attrs={"class":"category"}).text
if(not td.parent.find("i")):
url=td.parent.find("a")["href"]
我已经尝试将字符串匹配到 N/A 但它不起作用
解决方案
首先,您不必使用自定义函数来匹配多个类。您可以将不同的类作为列表传递。
其次,有两种方法可以让你得到你想要的。N/A
您可以在遍历所有标签时简单地检查文本是否包含,<td>
如果存在则跳过标签。
html = '''
<td align="left" class="category"> N/A</td>
<td align="left" class="title"> <a href="article-feb-0243.html">Wall Street cool to eBay's profit</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2017.html">Warnings about junk mail deluge</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2660.html">Web radio takes Spanish rap global</a></td>
<td align="left" class="category"> sport</td>'''
soup = BeautifulSoup(html, 'lxml')
for td in soup.find_all('td', class_=['category', 'title']):
if 'N/A' in td.text:
continue
print(td)
输出:
<td align="left" class="title"> <a href="article-feb-0243.html">Wall Street cool to eBay's profit</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2017.html">Warnings about junk mail deluge</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2660.html">Web radio takes Spanish rap global</a></td>
<td align="left" class="category"> sport</td>
您也可以使用自定义函数来执行此操作。
for td in soup.find_all(lambda tag: tag.name == 'td' and tag['class'][0] in ('category', 'title') and 'N/A' not in tag.text):
print(td)
推荐阅读
- java - 如何将本地日期时间转换为 GMT?
- swift - Swift moveBy 方法不会接受 CGFloat 参数
- r - 根据其他因素的水平将一列的值分配给另一列:R
- python-3.x - 如何调整 Google 电子表格的大小?
- python - 在 McMaster-Carr 网站上抓取数据时出现问题
- python - 如何从 Flask Server 中的 JSON 文件中获取数据
- oracle-apex - Oracle Apex 交互式网格在删除集列空/任何值时
- supertest - 如何在 Apache 超集中添加大于过滤器?
- c++ - cv::namedWindow() 崩溃,分段错误
- android - 如何使用导航组件更新/刷新目的地?