python beautifulsoap_【Python】BeautifulSoap抓取并解析网页流程

一、BeautifulSoap

1.首先必须要导入bs4库,创建BeautifulSoap对象

#coding=utf-8

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')   #html 为下载的网页,lxml为解析器

2.BeautifulSoap主要掌握三种方法

find_all('tag')    搜索当前所有的tag标签的集合

find("tag")        返回一个标签(这个方法用的少)

select("")           可以按标签查找,用的多是按标签逐层查找筛选元素

二、使用BeautifulSoup提取网页内容的一些技巧

1.find_all()    方法中单独的标签名,如a ,会提取网页中所有的 a 标签,这里要确保是我们所需要的链接a , 一般都不是,需要加上条件(就是标签的属性,加上限制筛选),如果这一及标签没有属性,最好往上一级找。

https://www.qiushibaike.com/text/,链接:段子戳我,抓取原创笑话段子。

(话说小白在这上面找半天才看到段子藏在span里面,我一直觉得自己有点智障=_=)

注意:如果写find_all("span")可以抓取到段子的内容,但是还会包含网页上其他span的内容,所以我们还要往上一级标签看,

就只是包含了段子内容的标签。

#coding=utf-8

from bs4 import BeautifulSoup

import requests

#使用requests抓取页面内容,并将响应赋值给page变量

html = requests.get('https://www.qiushibaike.com/text/')

#使用content属性获取页面的源页面

#使用BeautifulSoap解析,吧内容传递到BeautifulSoap类

soup = BeautifulSoup(html.content,'lxml')

links = soup.find_all('div',class_='content')

#link的内容就是div,我们取它的span内容就是我们需要段子的内容

for link in links:

print link.span.get_text()

运行结果:

2.select()方法

可以按标签逐层查找到我们需要的内容,这点特别方便,就是定位,避免了单一的标签无法定位到我们所需要的内容元素。

soup.select("html head title")  #标签层级查找

soup.select("td div a")         #标签路径 td-->div-->a

soup.select('td > div > a')        #note:推荐使用这种记法

选择谷歌浏览器,右键copy --copy selector

赋值得到内容:

#qiushi_tag_120529403 > a > div > span:nth-child(1)

对于这个内容要改一下~按照标签顺序去搜索

div > a > div > span (我运行的时候发现一个问题,> 前后一定要有空格,不然会报错的)

然后代码如下:(和前面的代码区别只有后三行)

#coding=utf-8

from bs4 import BeautifulSoup

import requests

#使用requests抓取页面内容,并将响应赋值给page变量

html = requests.get('https://www.qiushibaike.com/text/')

#使用content属性获取页面的源页面

#使用BeautifulSoap解析,吧内容传递到BeautifulSoap类

soup = BeautifulSoup(html.content,'lxml')

#我是分隔符,下面就是select()方法咯~

links = soup.select('div > a >div >span')

for link in links:

print link.get_text()

运行结果:

啊哦~是不是发现和上面运行结果不一样,这里还匹配到了评论,所以:

我们还要对定位进行修改,让它更精确,改成从标签a 开始,并且加上它的class属性。a.contentHerf 是在select方法中的写法。

具体是这样的:    a.contentHerf > div > span    (把它改到代码第三行再运行就好了~)

吃饭去,结果就不贴啦~

note:1)例子只介绍了抓取一页的内容

2)代码都是在python2.7中运行的

---------------------

作者:诶呀吗_Bug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值