做一次 BeautifulSoup 问题伸手党

2015-05-25 18:23:58 +08:00
 LINAICAI
通过print(soup.find_all('div','loopsum',limit=1))得到下面的内容

[<div class="loopsum"><p>xxxx</p></div>]

请问怎么拿到<p></p>之间的正文?
1589 次点击
所在节点    问与答
14 条回复
Sylv
2015-05-25 18:32:22 +08:00
result = soup.find('div', 'loopsum')
print result.p.text
killpanda
2015-05-25 18:47:49 +08:00
result = soup.get_text()
LINAICAI
2015-05-25 20:18:19 +08:00
@killpanda
@Sylv
好厉害
LINAICAI
2015-05-26 15:14:17 +08:00
@Sylv 大牛再请教个问题,形如data-original的属性怎么取
比如<img alt="aaa" class="lazy" data-original="xxx" height="140" src="ccc" width="201"/>

想得到xxx,怎么写,这段已经是通过soup.findAll('div','loopmain',limit=10)拿到的,想进一步得到xxx?
Sylv
2015-05-26 15:58:30 +08:00
tag['data-original']

先去过遍 bs4 的文档,这些都很基础
LINAICAI
2015-05-26 17:17:58 +08:00
@Sylv 还是不会。。。看懂了文档 运行不错想要的东西啊
大神,你看我这标题,帮忙下
LINAICAI
2015-05-26 17:18:58 +08:00
@Sylv data-original不是普通的属性节点啊
find_all好像没发搜
Sylv
2015-05-26 17:32:08 +08:00
没明白你的问题,你想找有 data-original 的 tag?
LINAICAI
2015-05-26 17:37:54 +08:00
@Sylv 想找 所有data-original里面的文本,这个文本是个图片URL,但并不是所有data-original都是我要的,所以要加一个条件img里面带class='lazy'的

<img alt="aaa" class="lazy" data-original="xxx" height="140" src="ccc" width="201"/>

想取到xxx的文本值
Sylv
2015-05-26 17:38:35 +08:00
results = soup.find_all('img', data-original=True)
print results[0]['data-original']
Sylv
2015-05-26 17:39:57 +08:00
results = soup.find_all('img', class_="lazy", data-original=True)
print results[0]['data-original']
LINAICAI
2015-05-26 17:48:24 +08:00
@Sylv
出错了
images = soup.find_all('img', class_='lazy', data-original=True)
SyntaxError: keyword can't be an expression
Sylv
2015-05-26 17:57:54 +08:00
images = soup.find_all('img', class_='lazy', attrs={'data-original':True})

没注意到参数名中不能有 “-“ 的问题,得用字典

Some attributes, like the data-* attributes in HTML 5, have names that can’t be used as the names of keyword arguments.
You can use these attributes in searches by putting them into a dictionary and passing the dictionary into find_all() as the attrs argument:
LINAICAI
2015-05-26 20:38:06 +08:00
@Sylv
已经搞定了
print("----------开始爬图片----------")
images = soup.find_all('img', class_='lazy', attrs={'data-original':True})
for obj in images:
#图片
print obj['data-original']
print('\n')

难点主要是-号的问题,不过因为大神提示,对字段的用法有了一点体会。。。

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

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

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

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

© 2021 V2EX