python写爬虫之提取网页的内容(筛选)

       利用网络爬虫获取简单信息的基本步骤是:提取网页源码——>筛选内容——>保存内容

一、提取网页源码

       取网页源码方法很多,常用的库有:urllib库,requests库等。。。 具体的例程可访问我的上篇文件:

       https://blog.csdn.net/scx2006114/article/details/81389331 

二、筛选内容

       在我的上篇文章里使用的筛选的方法是通过正则表达式完成,但正则表达式编写过程复杂,而且容易出错。在此篇文章中我向大家替换的方法,主要是应用库来代替正则表达式。

      ①使用 XPath

      ②使用 Beautiful Soup

      ③使用 pyquery

       这三种库具体的介绍和使用教程可阅读《Python 3网络爬虫开发实战 ,崔庆才著》(文末附书本下载链接)。我以Beautiful Soup库为例,实战爬取网页内容。

      目标:爬取网页简书中文章小标题和作者

                 环境:python3.65   pycharm软件

                 思路:提取网页的源码—>筛选源码—>输出结果(保持文件)

首先我们先来看看简书网页的源码:

<li id="note-29368298" data-note-id="29368298" class="have-img">
    <a class="wrap-img" href="/p/d20bddb4f8d9" target="_blank">
      <img data-echo="//upload-images.jianshu.io/upload_images/2729710-fbb42957dc006ab2.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/300/h/240" class="img-blur" src="//upload-images.jianshu.io/upload_images/2729710-fbb42957dc006ab2.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/150/h/120" alt="120" />
    </a>
  <div class="content">
    <a class="title" target="_blank" href="/p/d20bddb4f8d9">优秀的女人,喜欢坚持这些习惯</a>
    <p class="abstract">
      题记:要做这样的女子:面若桃花、心深似海、冷暖自知、真诚善良、触觉敏锐、情感丰富、坚忍独立、缱绻决绝。坚持读书、写字、听歌、旅行、上网、摄影,有...
    </p>
    <div class="meta">
      <a class="nickname" target="_blank" href="/u/3b900bbedf35">悦读时刻</a>
        <a target="_blank" href="/p/d20bddb4f8d9#comments">
          <i class="iconfont ic-list-comments"></i> 39
</a>      <span><i class="iconfont ic-list-like"></i> 236</span>
    </div>
  </div>
</li>

       通过观赏上面的源码会发现有很多节点,源码的父节点是li,子节点有很多,我们需要观察的我要获取的内容,是a这个子节点,Beautifulsoup库就是通过网页中的节点来筛选不同的内容。

       要使用Beautifulsoup库就得先导入这个库:from bs4 import BeautifulSoup,然后将这个库初始化并选择解析器:

soup = BeautifulSoup(get_html('https://www.jianshu.com/'), 'lxml'),方法BeautifulSoup()中第一个参数是网页源码,第二个参数是使用解析器的类型,此处使用的是lxml解析器。其次通过find_all()方法搜索父节点和子节点:for li in soup.find_all(name='li'),最后要输出文本:print(a.string)。具体实现代码如下:

#初始化BeautifulSoup库,并设置解析器
soup = BeautifulSoup(get_html('https://www.jianshu.com/'), 'lxml')   
print(get_html('https://www.jianshu.com/'))
for li in soup.find_all(name='li'):         #遍历父节点
        for a in li.find_all(name='a'):     #遍历子节点
                print(a.string)      #输出结果

完整代码附上(仅供参考):

import requests
import re
from bs4 import BeautifulSoup
def get_html(url):
    headers = {
        'User-Agent':'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_4)\
        AppleWebKit/537.36(KHTML, like Gecko) Chrome/52 .0.2743. 116 Safari/537.36'

    }     #模拟浏览器访问
    response = requests.get(url,headers = headers)       #请求访问网站
    html = response.text       #获取网页源码
    return html                #返回网页源码

soup = BeautifulSoup(get_html('https://www.jianshu.com/'), 'lxml')   #初始化BeautifulSoup库,并设置解析器
print(get_html('https://www.jianshu.com/'))
for li in soup.find_all(name='li'):         #遍历父节点
        for a in li.find_all(name='a'):     #遍历子节点
            if a.string==None:
                pass
            else:
                print(a.string)      #输出结果

Python 3网络爬虫开发实战PDF文件的链接: 链接:https://pan.baidu.com/s/1ARPajjsK--QIAjPGKxbW6Q 提取码:asd6 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远去的星光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值