1
omg21 OP 我用 soup.find_all(text="娱乐")得到结果是 []
用 soup.find(text="娱乐")得到结果是 None 所以现在不知道应该如何才能取到标签 |
2
practicer 2016-10-02 23:12:46 +08:00
html = '''<p id="a1">新闻</p>
<p id="a2">娱乐</p>''' bs = BeautifulSoup(html, 'html.parser') theTag = bs.find(text='娱乐').find_parent() |
4
gyh 2016-10-02 23:33:41 +08:00 via iPhone
对 find_all(p)循环,若 text=="娱乐",赋给一个变量,退出循环。
这样? |
5
finalspeed 2016-10-02 23:53:24 +08:00 via Android 1
Although string is for finding strings, you can combine it with arguments that find tags: Beautiful Soup will find all tags whose .string matches your value for string. This code finds the <a> tags whose .string is “ Elsie ”:
soup.find_all("a", string="Elsie") # [<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>] The string argument is new in Beautiful Soup 4.4.0. In earlier versions it was called text: soup.find_all("a", text="Elsie") # [<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>] |
6
zqcolor 2016-10-03 07:08:03 +08:00
soup = bs4.BeautifulSoup(Response)
a = soup.find('a', text = '下一页') url = a['href'] |
7
dsg001 2016-10-03 08:15:59 +08:00
为嘛不用 lxml ?
//p[text()="娱乐"] |
8
omg21 OP @finalspeed 这样可以取到, find_all("a", string="Elsie") ,可是这里面有"a",如果不加"a"能不能取到整条<a>呢?
在我的实例里,想取<p id="a2">娱乐</p>,这里的标签<p>是变量,也有可能是<div>,<td>,所以只能用 find_all(text="娱乐")这样的方法表述,可是我现在取不出来。 |
10
aristotll 2016-10-03 09:16:13 +08:00
建议用 css selector 迟早要接触这一块的 学习 BS4 自带函数还不如学习这东西更通用
|
11
popu111 2016-10-03 09:16:29 +08:00 via Android
@finalspeed 论看英文文档的重要性_(:з」∠)_中文版还没跟进到 4.4.0
|
13
panyanyany 2016-10-03 09:32:09 +08:00
楼主可以先直接在 outerHTML 里查找到 “娱乐” 然后上溯到最近的标签啊
|
14
sherlocktheplant 2016-10-03 10:09:11 +08:00
@omg21
我没试过 不过应该是这样 result = soup.find_all(string=u"娱乐") 得到的应该是一个 NavigatableString 的数组: for item in result: element = item.parent |
15
sherlocktheplant 2016-10-03 10:13:42 +08:00
测试了一下应该是
result = soup.find_all(string=u"娱乐") |
16
sherlocktheplant 2016-10-03 10:13:52 +08:00
测试了一下应该是
result = soup.find_all(text=u"娱乐") |
17
sherlocktheplant 2016-10-03 10:14:49 +08:00
|
18
sherlocktheplant 2016-10-03 10:17:18 +08:00
string 和 text 都可以
|
19
shoaly 2016-10-03 12:05:03 +08:00
放弃 soup 吧 ,并不鸡汤, 安利你 pyquery, 语法和 jquery 通用
|
20
omg21 OP @sherlocktheplant 你的方法能取到文本“娱乐”,但是取不到<p>啊,而且标签也不固定,不一定是<p>,还有其他的。
|
21
xucuncicero 2016-10-03 14:49:27 +08:00
```python3
soup = BeautifulSoup(html, 'html.parser') theTag = soup.find_all(text='娱乐') for tag in theTag: print(tag.find_parent("p")) ``` |
22
xucuncicero 2016-10-03 14:50:35 +08:00
2 楼的没问题,你说报错,具体是啥
|
23
Kisesy 2016-10-03 16:52:36 +08:00
b = BeautifulSoup("""<p id="a1">新闻</p><p id="a2">娱乐</p><div id="a3">娱乐</div>""")
print(b.find_all(True, text='娱乐')) 额,标签不固定的话写个 True 不就行了。。。 输出 [<p id="a2">娱乐</p>, <div id="a3">娱乐</div>] |
24
sherlocktheplant 2016-10-03 18:37:49 +08:00
@omg21 可以 得到的字符串不是一般的字符串 是 NavigatableString 所有可以直接通过 parent 属性访问到标签 我那个 gist 你运行一下就懂了
|
26
omg21 OP @xucuncicero 是的,是我自己搞错了
|