文档章节

python 利用Beautifulsoup爬取笑话网站

GodAKL
 GodAKL
发布于 2017/09/09 17:02
字数 1027
阅读 599
收藏 29

利用Beautifulsoup爬取知名笑话网站

首先我们来看看需要爬取的网站:http://xiaohua.zol.com.cn/

1.开始前准备

1.1 python3,本篇博客内容采用python3来写,如果电脑上没有安装python3请先安装python3.

1.2 Request库,urllib的升级版本打包了全部功能并简化了使用方法。下载方法:

pip install requests

1.3 Beautifulsoup库, 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.。下载方法:

pip install beautifulsoup4

1.4 LXML,用于辅助Beautifulsoup库解析网页。(如果你不用anaconda,你会发现这个包在Windows下pip安装报错)下载方法:

pip install lxml

1.5 pycharm,一款功能强大的pythonIDE工具。下载官方版本后,使用license sever免费使用(同系列产品类似),具体参照http://www.cnblogs.com/hanggegege/p/6763329.html

2.爬取过程演示与分析

from bs4 import BeautifulSoup
import os
import requests

导入需要的库,os库用来后期储存爬取内容。

随后我们点开“最新笑话”,发现有“全部笑话”这一栏,能够让我们最大效率地爬取所有历史笑话!

我们来通过requests库来看看这个页面的源代码:

from bs4 import BeautifulSoup
import os
import requests
all_url = 'http://xiaohua.zol.com.cn/new/ 
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
all_html=requests.get(all_url,headers = headers)
print(all_html.text)

header是请求头,大部分网站没有这个请求头会爬取失败

部分效果如下:

通过源码分析发现我们还是不能通过此网站就直接获取到所有笑话的信息,因此我们在在这个页面找一些间接的方法。

点开一个笑话查看全文,我们发现此时网址变成了http://xiaohua.zol.com.cn/detail58/57681.html,在点开其他的笑话,我们发现网址部都是形如http://xiaohua.zol.com.cn/detail?/?.html的格式,我们以这个为突破口,去爬取所有的内容

我们的目的是找到所有形如http://xiaohua.zol.com.cn/detail?/?.html的网址,再去爬取其内容。

我们在“全部笑话”页面随便翻到一页:http://xiaohua.zol.com.cn/new/5.html ,按下F12查看其源代码,按照其布局发现 :

每个笑话对应其中一个

  • 标签,分析得每个笑话展开全文的网址藏在href当中,我们只需要获取href就能得到笑话的网址

    from bs4 import BeautifulSoup
    import os
    import requests
    RootUrl = 'http://xiaohua.zol.com.cn/new/'
    headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
    RootCode=requests.get(RootUrl,headers = headers)
    #print(RootCode.text)
    Soup = BeautifulSoup(RootCode.text,'lxml')
    SoupList=Soup.find_all('li',class_ = 'article-summary')
    for i in SoupList:
        #print(i)
        SubSoup = BeautifulSoup(i.prettify(),'lxml')
        list2=SubSoup.find_all('a',target = '_blank',class_='all-read')
        for b in list2:
            href = b['href']
            print(href)

    我们通过以上代码,成功获得第一页所有笑话的网址后缀:

    也就是说,我们只需要获得所有的循环遍历所有的页码,就能获得所有的笑话。

    上面的代码优化后:

    from bs4 import BeautifulSoup
    import requests
    import os
    
    RootUrl = 'http://xiaohua.zol.com.cn/new/'
    headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
    RootCode=requests.get(RootUrl,headers = headers)
    
    def GetJokeUrl():
        JokeUrlList = []
        Soup = BeautifulSoup(RootCode.text,'lxml')
        SoupList=Soup.find_all('span',class_ = 'article-title')
        for i in SoupList:
            SubSoup = BeautifulSoup(i.prettify(),'lxml')
            JokeUrlList.append("http://xiaohua.zol.com.cn/"+str(SubSoup.a['href']))
        return JokeUrlList

    简单分析笑话页面html内容后,接下来获取一个页面全部笑话的内容:

  • from bs4 import BeautifulSoup
    import requests
    import os
    
    RootUrl = 'http://xiaohua.zol.com.cn/new/'
    headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
    RootCode=requests.get(RootUrl,headers = headers)
    
    def GetJokeUrl():
        JokeUrlList = []
        Soup = BeautifulSoup(RootCode.text,'lxml')
        SoupList=Soup.find_all('span',class_ = 'article-title')
        for i in SoupList:
            SubSoup = BeautifulSoup(i.prettify(),'lxml')
            JokeUrlList.append("http://xiaohua.zol.com.cn/"+str(SubSoup.a['href']))
        return JokeUrlList
    
    def GetJokeText(url):
        HtmlCode = requests.get(url,headers=headers) #don not forget
        Soup = BeautifulSoup(HtmlCode.text,'lxml')
        Content = Soup.find_all('p')
        for p in Content:
            print(p.text)
            
        
    def main():
        JokeUrlList = GetJokeUrl()
        for url in JokeUrlList:
            GetJokeText(url)
            
    if __name__ == "__main__":
        main()
    

    效果图如下:

     

  • 大功告成!

© 著作权归作者所有

共有 人打赏支持
GodAKL
粉丝 8
博文 5
码字总数 3726
作品 0
南昌
程序员
私信 提问
加载中

评论(5)

sprouting
sprouting

引用来自“sprouting”的评论

运行报 :
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?

引用来自“宝茜滴老公”的评论

这个是因为你用的python没有安装lxml哦,pip install lxml就行了
已经安装了的,重新卸载后再次安装还是不行
GodAKL
GodAKL

引用来自“sprouting”的评论

运行报 :
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
这个是因为你用的python没有安装lxml哦,pip install lxml就行了
sprouting
sprouting
运行报 :
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
clouddyy
clouddyy
收藏
HingBox
HingBox
蛮好的,学习了
(转)Python中第三方模块的使用心得

前面已经说了,其实学习Python的过程,很多时候就是在学习如何使用第三方模块,完成自己需要的功能。 关于Python的第三方库类库,其实网上很多很多相关资料。 其中,官网的Python库:Python ...

Dyllian
2013/05/22
0
0
BeautifulSoup安装及其应用

BeautifulSoup 安装及其使用 BeautifulSoup 是个好东东。 官网见这里: http://www.crummy.com/software/BeautifulSoup/ 下载地址见这里:http://www.crummy.com/software/BeautifulSoup/bs......

Prefecter
2014/01/02
0
0
ubuntu12.04 安装BeautifulSoup遇到的问题

root@ubuntu :/home/chris# apt-get install python-setuptools Reading package lists... Done Building dependency tree Reading state information... Done The following packages were ......

durban
2012/05/18
0
0
python BeautifulSoup模块的安装

python BeautifulSoup模块的安装 ···一个BeautifulSoup的模块,安装就浪费了俺这么长时间,下载的是BeautifulSoup4-4.1.3, 安装的时候就是 python setup.py build python setup.py inst...

昏鸦
2014/10/17
0
2
网络爬虫05: BesutifulSoup库详解

BeautifulSoup 1.什么是BeautifulSoup 灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页信息的提取 2.安装BeautifulSoup 3.解析库 解析器 使...

代码打碟手
09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
8
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
5
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
20
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部