美文网首页
Python爬虫|使用urllib库爬取百度新闻首页的标题信息

Python爬虫|使用urllib库爬取百度新闻首页的标题信息

作者: ShowMeCoding | 来源:发表于2020-09-01 11:28 被阅读0次

    1 urllib爬虫库介绍

    • Python内置HTTP请求库,不需要额外安装
    • 官方链接:https://docs.python.org/3/library/urllib.html
    • 4个模块
      (1)urllib.request:可以⽤来发送request和获取request的结果
      (2)urllib.error:包含了urllib.request产⽣的异常
      (3)urllib.parse:⽤来解析和处理URL
      (4)urllib.robotparse:⽤来解析⻚⾯的robots.txt⽂件

    2 实例演示

    案例:爬取百度新闻⾸⻚的新闻标题信息,url地址:http://news.baidu.com/

    具体实现步骤
    1.导⼊urlib库和re正则
    2.使⽤urllib.request.Request()创建request请求对象
    3.使⽤urllib.request.urlopen执⾏信息爬取,并返回Response对象
    4.使⽤read()读取信息,使⽤decode()执⾏解码
    5.使⽤re正则解析结果
    6.遍历输出结果信息

    2.1代码实现

    '''
    案例:爬取百度新闻首页的新闻标题信息
    url地址:http://news.baidu.com/
    '''
    
    # 1 导入库
    from urllib import request
    import re
    
    # 2 准备url地址,创建请求对象
    url = 'http://news.baidu.com/'
    req = request.Request(url)
    
    # 3 发送请求获取response
    res = request.urlopen(req)
    
    # 4 解析结果:从响应对象中读取信息并解码
    html = res.read().decode('utf-8')
    # print(html)
    pat = '<a href="(.*?)" mon=".*?" target="_blank">(.*?)</a>'
    dlist = re.findall(pat,html)
    print(dlist)
    
    # 5 存储/输出结果
    for v in dlist:
        if v[1] != '#{title}':
            print(v[1]+":"+v[0])
    

    2.2 利用正则表达式进行结果解析

    正则表达式官方参考文档:https://docs.python.org/zh-cn/3/library/re.html

    # 1 导入库
    from urllib import request
    import re
    
    # 2 准备url地址,创建请求对象
    url = 'http://news.baidu.com/'
    req = request.Request(url)
    
    # 3 发送请求获取response
    res = request.urlopen(req)
    
    # 4 解析结果:从响应对象中读取信息并解码
    html = res.read().decode('utf-8')
    print(html)
    
    • 对网页内容进行输出后查看爬取的内容
    <li class="bold-item"><a href="http://baijiahao.baidu.com/s?id=1676551984169544562" target="_blank" mon="a=9">5G还没用上,4G却越来越慢了?</a></li>
    <li><a href="http://baijiahao.baidu.com/s?id=1676519964597345236" target="_blank" mon="a=9">二线网约车集体反攻滴滴</a></li>
    <li><a href="http://baijiahao.baidu.com/s?id=1676500046896479892" target="_blank" mon="a=9">微软三杰</a></li>
    <li><a href="http://baijiahao.baidu.com/s?id=1676511390908527616" target="_blank" mon="a=9">京东方,落后者的宿命</a></li>
    <li><a href="http://baijiahao.baidu.com/s?id=1676498875100894367" target="_blank" mon="a=9">为什么互联网公司纷纷收购电竞战队?</a></li>
    
    • 查看到新闻标题内容之后,书写正则表达式进行内容解析
    pat = '<a href="(.*?)" mon=".*?" target="_blank">(.*?)</a>'
    

    3 小结

    • 网络爬虫运行时序图


      image.png

      在正式爬取过程中,我们只需要关注URL管理器,解析器和应用,调度器和下载器在框架内部封装完成。

    ⽹络爬⾍使⽤的技术--数据抓取

    • 在爬⾍实现上,除了scrapy框架之外,python有许多与此相关的库可供使⽤。其中,在数据抓取⽅⾯包括: urllib(urllib3)、requests、mechanize、selenium、splinter;
    • 其中,urllib(urllib3)、requests、mechanize⽤来获取URL对应的原始响应内容;⽽selenium、splinter通过加载浏览器驱动,获取浏览器渲染之后的响应内容,模拟程度更⾼。
    • 考虑效率、当然能使⽤urllib(urllib3)、requests、mechanize等解决的尽量不⽤selenium、splinter,因为后者因需要加载浏览器⽽导致效率较低。
    • 对于数据抓取,涉及的过程主要是模拟浏览器向服务器发送构造好的http请求,常⻅类型有:get/post

    ⽹络爬⾍使⽤的技术--数据解析

    • 在数据解析⽅⾯,相应的库包括:lxml、beautifulsoup4、re、pyquery
    • 对于数据解析,主要是从响应⻚⾯⾥提取所需的数据,常⽤⽅法有:xpath路径表达式、CSS选择器、正则表达式等
    • 其中,xpath路径表达式、CSS选择器主要⽤于提取结构化的数据。⽽正则表达式主要⽤于提取⾮结构化的数据

    相关文章

      网友评论

          本文标题:Python爬虫|使用urllib库爬取百度新闻首页的标题信息

          本文链接:https://www.haomeiwen.com/subject/jqzmsktx.html