慕课网项目:Python开发简单爬虫学习笔记

本文是关于Python3开发简单爬虫的学习笔记,介绍了爬虫的基本概念、简单爬虫架构,包括URL管理器、网页下载器urllib2和网页解析器BeautifulSoup的使用,并给出一个爬取百度百科Python词条的完整实例。
摘要由CSDN通过智能技术生成

课程链接Python开发简单爬虫

 

0.必要说明

我的java版本1.8,python版本3.6,eclipse版本4.5,BeautfilSoup版本4。

视频中用到的python版本2.7。

有几个坑需要注意:

  • python3.6不支持urllib2。而是换位:urllib。
  • 百度百科页面模式变了,所以我们爬的话需要改变策略。


1.爬虫简介 

爬虫:一段自动抓取互联网信息的程序 互联网由各种各样的网页组成,每个网页都有对应的url。一个Url上又能指向其他url。这种url之间相互的指向关系,就形成了一个网状。爬虫是设置了主体,设置了目标自动从互联网上获取我们需要的数据。它可以从一个url出发,到达所有与他相关的url。并且从每个页面提取出我们需要的数据也就是说,他是自动访问互联网并且提取数据的程序。

爬虫价值?互联网信息,为我所用!

eg.新闻聚合阅读器,最爆笑故事app,图书价格对比,技术大全。

2.简单爬虫架构 

爬虫调度端(启动爬虫,停止爬虫,监事爬虫运行情况

爬虫:

 

  • URL管理器:对将要爬取的url和已经爬取过的url进行管理。从中可以我们可以取出一个带爬取的url,传送给网页下载器。
  • 网页下载器:会将指定的网页下载下载存储成一个字符串。这个字符串回传送给网页解析器。
  • 网页解析器:会解析出有价值的数据;该页面被解析出的url将被补充进URL管理器。

运行流程:

3.URL管理器 

管理待抓取URL集合和已抓取URL集合——防止重复抓取、循环抓取

伪代码如下:


        if(URL尚未存在容器中){
            添加新URL到带爬取的集合中。
        }

        if(容器中还有待爬取URL) {
            获取带爬取URL;
            //todo;(将给其他组件处理)
            将URL从带爬取集合移动到已爬取集合。
        }

实现URL管理器

 

  • 待爬取URL和已爬取URL放到内存中:Python-set() —set()
  • 关系型数据库中Mysql-urls(url , is_crwaled)
  • 缓存型数据库Redis -set -set

4.网页下载器urllib2 

将互联网URL对应的网页下载到本地。

网页下载器通过URL对应的网页以HTML方式下载到本地。存储成本地文件/内存字符串。

urllib2——pythone官方基础模块。支持直接URL下载,或者向网页提供以下需要用户输入的数据。甚至支持需要登录网页的cookie处理。需要代理访问的增强处理。

requests——三方提供,更为强大。

urlllib2下载网页三种方法:

1.urllib2.urlopen(url)
            import urllib2
            //直接请求
            response = urllib2.urlopen("http://www.baidu.com")
            //获取状态码,如果是200表示获取成功
            print response.getcode()
            //读取内容
            cont = response.read()
        2.增强处理data,http header
        url,data,header给urllib2.Requset类,生成一个Requset对象。然后urllib2.urlopen(request)
            import urllib2
            //创建Requset对象
            requset = urllib2.Requset(url)
            //添加数据
            requset.add_data('a' , '1')
            //添加http的header。伪装成Mozilla浏览器
            requset.add_header('User-Agent','Mozilla/5.0')
            //发送请求处理结果
            response = urllib2.urlopen(requset)
        3.添加特殊情景处理器
            HTTPCookieProcessor
            ProxyHandler
            HTTPShandler
            HTTPRedirectHandler
            传递给opener = urllib2.bulid_opener(handler)
            urllib2.install_opener(opener)
            urllib2.urlopen(url)或者
                urllib2.urlopen(requset)

            import urllib2,cookilelib

            //创建cookile容器,存储cookie数据
            cj = cookilelib.CookileJar()
            //创建一个opernr
            opener = urllib2.bulid_opener(urllib2.HTTPCookieProcssor(cj))
            //给urllib2安装opener
            urllib2.install_opener(opener)
            //使用带有的cookie的urllib2访问网页
            response = urllib2.urlopen("http://www.baidu.com")

 

5.网页解析器BeautifulSoup 

从网页中提取有价值的工具

HTML网页字符串交给网页解析器,他会提取出价值数据和新URL列表

Python有哪几种网页解析器?

  • 模糊匹配
  1. 正则表达式
  • 结构化解析:将整个网页解析成DOM树进行上下级遍历与访问
  1. html.parser
  2. (糅合html.parser和lxml)
  3. lxmlBeautifulSoup

关于BeautifulSoup官方文档

语法(套路):

html->创建BeautifulSoup对象->搜索节点(可以按照名称属性文字进行搜索)->访问节点名称属性文字
 

<a href="123.html" class='article_tink'>Python</a>

from bs4 import BeautifulSoup
    #根据html网页字符串创建Beautiful3Soup对象
    soup = Beautiful(
        html_doc, #HTML文档字符串
        ‘html.parser’ #html解析器
        from_encoding='utf-8' #html文档编码
    )
    #搜索节点
    find_all(name , attrs , string)
    #查找所有标签为a的节点
    soup.find_all('a')
    #查找所有标签为a,连接符合/view/123.htm形式的节点
    soup.find_all('a' , href='/view/123.htm')
    soup.find_all('a' , href=re.compole(r'/view/\d+\.html'))
    #查找所有标签为div , class为abc,文字为Python的节点
    soup.find_all('div' , class_='abc' , string='Python')
    #访问节点信息
    #得到节点<a href="1html">Python</a>
    #获取查找到的节点的标签名称
    node.name()
    #获取查找到的a节点的href属性
    node['href']
    #获取查找到的a节点的链接文字
    node.get_text()

6.完整实例:

 

  •     确定目标(爬取百度百科Python词条相关1000个页面数据)
  1.         入口页:https://baike.baidu.com/item/Python/407313?fr=aladdin
  2.         url格式
  3.         数据格式
  4.         页面编码
  •     分析目标(策略!URL格式【审查元素】,数据格式,网页编码)
  •     编写代码
  •     执行爬虫

7.目录结构:

8.代码:

注意:需要自己调整策略。因为百度的页面会升级。

代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值