BeautifulSoup 怎样才可以 find_all 再次 find_all 结果

2016-10-25 01:01:34 +08:00
 771456556
就是我之前用 find_all 定位了一个标签,然后我想再次用 find_all 查询第一次 find_all 的结果,可是却失败了
4739 次点击
所在节点    Python
14 条回复
771456556
2016-10-25 01:03:53 +08:00
或者可不可以把 find_all 的结果全部转换成 string ,
b1eberg0n
2016-10-25 01:05:56 +08:00
a = soup.findall('a')
b = a[0].findall('b')
Arthur2e5
2016-10-25 01:47:59 +08:00
改写一下 @b1eberg0n ,来个范围攻击的……

a_b = [a.findall('b') for a in soup.findall('a')]
a_b_flat = [result for a in soup.findall('a') for result in a.findall('b')]
771456556
2016-10-25 07:28:23 +08:00
771456556
2016-10-25 07:29:00 +08:00
@b1eberg0n @Arthur2e5 我把报错图片上传了,您看一下
orange88
2016-10-25 07:34:02 +08:00
li 是 none ,上一个没找到?
771456556
2016-10-25 07:37:34 +08:00
@orange88 li[0]能打印出来,我用 print 打印出了,但是加上 b=li 那句话就打印失败了,很费解
orange88
2016-10-25 07:41:42 +08:00
li[0].findall
771456556
2016-10-25 07:44:39 +08:00
@orange88 好的,谢谢,等下上完课回去试试
whwq2012
2016-10-25 08:12:31 +08:00
find_all 返回的结果是个 list ,要其中的结果得把它迭代一遍才行,最好再加个异常处理,防止出现你这样的情况
practicer
2016-10-25 09:08:16 +08:00
get_all_secondary_elements(bs)

try:
top_elements = bs.find_all(...)

for top_element in top_elements:

secondary_elements = top_element.find_all(...)

if secondary_elements is not None:
yield secondary_elements

except (AttributeError, TypeError):
yield


secondary_elements = list(get_all_secondary_elements)
wyntergreg
2016-10-25 10:10:53 +08:00
转成 tag 再 findall
b1eberg0n
2016-10-25 10:24:54 +08:00
@771456556

li = soup.findAll('div', class = 'div_content')
print li
b = li[0].findAll('ul')
print b

再试试
771456556
2016-10-25 12:49:07 +08:00
@b1eberg0n 改成 find_all 就好了…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/315180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX