爬虫学习(二)

前言

上篇文章我们使用了原生urllib3库进行爬虫,但我们对爬取到的网页还需解码,很不方便,我们这次就使用另一个叫做requests的库

正文

使用requests库的方式

  • 如果没有requests可以通过在虚拟环境中执行pip install requests安装
  • 编写程序
    # @File:    code02.py
    # @Author:  lengwen
    # @Time:    2019-07-25 10:14
    # @Desc:    使用requests库的方式
    import requests
    resp = requests.get('http://www.163.com')
    # 状态码
    print("状态码:", resp.status_code)
    # 编码
    print("编码", resp.encoding)
    # 响应内容
    print(resp.text)
    

解析网页

  • 光爬取到数据还不够,我们上篇文章说过爬到的数据还需要解析,解析出我们需要的有用的东西

  • 通常解析的方法

    • 正则表达式
    • xpath
    • BeautifulSoup
  • 正则表达式的方式解析数据

  • 需求: 我们先访问目标网页http://www.163.com,我们的需求就是爬取出里面的新闻链接
    [外链图片转存失败(img-dKZxiwDn-1564032774845)(https://raw.githubusercontent.com/kevinlu98/cloudimg/master/data/QQ20190725-102404@2x.png)]

  • 通过审查元素我们发现新闻链接都有一些共性,
    [外链图片转存失败(img-MqDpp8bl-1564032774846)(https://raw.githubusercontent.com/kevinlu98/cloudimg/master/data/QQ20190725-103517@2x.png)]

    • 都在<li></li>中,并且这个<li>可能有class属性
    • 都是<a>标签, 并且href都是以https://news.163.com/数字开头
  • 找到这些共性就好说了,我们先构建正则表达式
    <li.*><a href="(https://news.163.com/\d.*?)">(.*?)</a>
    关于这个正则表达式简单的说下

    • []:代表里面的字符是一个整体
    • ? :代表之前的字符串要么不出现,要么出现一次
    • . :匹配除换行符 \n 之外的任何单字符
    • * :匹配前面的子表达式零次或多次
    • \d:匹配数字

    所以在看上面的正则表达式

    • .*?: 任意字符出现0到任意多次
  • 现在用一些正则工具测下我们的正则表达式http://tool.oschina.net/regex/

  • 我们通过编写Python程序进行匹配

    # @File:    coed03.py
    # @Author:  lengwen
    # @Time:    2019-07-25 10:22
    # @Desc:    正则表达式的方式解析数据
    
    import requests
    # 导入re正则库
    import re
    
    url = 'http://www.163.com'
    resp = requests.get(url)
    
    # 构建正则表达式字符串 字符串前面的r代表不转义字符串里的内容
    pattern_str = r'<li.*><a href="(https://news.163.com/\d.*?)">(.*?)</a>'
    # 转换为正则表达式
    pattern = re.compile(pattern_str)
    # 查找所以匹配结果,我们需要匹配的内容在正则表达式中的()中
    news_datas = re.findall(pattern, resp.text)
    print(len(news_datas))
    for data in news_datas:
        print(data)
    
    

    我们看下结果,一条连接,一个标题 ,我们想要的结果出来了
    [外链图片转存失败(img-4VmpymPL-1564032774848)(https://raw.githubusercontent.com/kevinlu98/cloudimg/master/data/QQ20190725-110556@2x.png)]

我们正则方式的解析至此已经完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值