回答一个简友的问题
在之前的一篇文章《爬虫搜索神器BeautifulSoup和XPath 的使用》中,我介绍了BeautifulSoup和XPath,但在具体的使用方法上,没有做过多的详细说明。
需要说明的是BeautifulSoup是基于DOM的,会载入整个文档,再解析整个DOM树。
BeautifulSoup的find_all('tag')方法,是按照tag取出来的tag标签及其内容。那如何取到标签的内容,或者子标签的内容。实际上这还是一个DOM的层级结构问题。
之所有要选取到提取h4标签,而不是直接find_all('a'),是因为网页上的a标签很多,一些不是我们所需要提取的内容。
<h4 class="title">
<a target="_blank" href="/p/9f96987325bd">《30年后,你拿什么养活自己?》一上班族的财富人生规划</a>
</h4>
links = soup.find_all('h4') ,要提取a标签的文字内容,应该是这样:
for link in links:
print link.a.get_text()
#print link.a.text
print link.a['href']
即link(h4)下的a下的文字,而href是属性,就是link.a['href']即可。
完整代码:
def getHtml(url):
return requests.get(url).text
def parse(html):
html = getHtml(html)
soup = BeautifulSoup(html,'html.parser',from_encoding='utf-8')
links = soup.find_all('h4')
for link in links:
print link.a.get_text()
#print link.a.text #也可以
print link.a['href'] #提取h4下a标签的href中的链接
不同标签内容(属性)提取的关键是理解、弄清文档结构。更多用法,还要要多看文档:《Beautiful Soup 4.2.0 文档》
XPath提取出来的也是标签,加上text(), @href,提取的才是内容,可以对比一下学习。