作者bluefantasia (镜华)
看板Python
标题[问题] BeautifulSoup 新手问题
时间Wed Mar 14 11:56:01 2018
各位前辈好,小弟
刚开始接触Python,最近刚学到BeautifulSoup做爬虫
於是就想要试着实做看看,但是看了老半天还是不是很了解
soup.get_text、soup.content等差别
还有bs4.element.Tag到底有那些指令是可以用的
目前小弟用yahoo的电影排行做练习,程式码如下:
-----
url='
https://movies.yahoo.com.tw/chart.html'
TAG='div'
TAGClass='tr'
geturl = requests.get(url)
soup = BeautifulSoup(geturl.text, 'lxml')
articles=soup(TAG, TAGClass)
for article in articles:
Rank=article.find('div','td').contents
Title=article.find('div','rank_txt')
print(Rank,Title)
print(type(article),type(Rank),type(Title))
----
本来是想做出列出排名、电影名称等资讯
但不知为何Title这边不能用.contents来抓出里面的电影名称(但是Rank却可以)
也不能用get_Text(说不支援)
网页查了老半天还是找不到方法@@
因此来此请较各位前辈,看小弟到底是哪些观念有问题
(另外想确认一下,一般是在寻找资料时
是会从要抓的资料上一层的Tag跟tag class来往下用for回圈这样寻找吗?
还是其实有比较简单的做法呢?)
先谢谢各位前辈了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.136.13.206
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1520999764.A.395.html
2F:推 froce: find_all()应该会是你要的 03/14 16:02
3F:→ bluefantasia: 感谢f大,但是我目前用上面程式码跑的结果是如下: 03/14 16:13
4F:→ bluefantasia: ['2'] <div class="rank_txt">红雀</div> 03/14 16:13
5F:→ bluefantasia: 前面的[2]用content提出来,但是後面名字却提不出来 03/14 16:14
6F:→ bluefantasia: find_all我看到可用加关键字,但是片名似乎无法? 03/14 16:15
7F:推 froce: 因为你的Title第1个会是None(bs4没找到),当然不会有cont 03/14 16:33
8F:→ froce: contents可以给你抓啊。 03/14 16:34
10F:→ froce: 你可以看我改过的范例 03/14 16:36
11F:→ bluefantasia: f大的结果就是我想做出来的啊(泣)~但想请问一下 03/14 16:58
12F:→ bluefantasia: if A and B一般是两者成立,所以这边是两者都有找到 03/14 16:58
13F:→ bluefantasia: 才print出来的意思吗? 03/14 16:59
14F:→ froce: 对,没找到会传回 None,None typeˉ当然不会有contents等 03/14 17:04
15F:→ froce: 属性,你要程式印出 None.contents,我们可爱的蟒蛇当然会 03/14 17:04
16F:→ froce: 生气气的跟你说「你唬我喔」。 03/14 17:04
17F:→ froce: 所以要检查传回结果都不是 None,才能存取contents属性。 03/14 17:04
18F:推 froce: 另外可以去学 pyquery,学会你也会用 CSS selector 了。 03/14 17:10
19F:→ bluefantasia: 收到,感谢f大的指点 03/15 04:51