python爬虫系列(一)

系统 318 0

前言

关于python爬虫目前有两个主流的库一个是urllib和requests 在python3中urllib2已经没有了,取而代之的是urllib.request。这里的话我将首先介绍urllib.request的使用。之后我再介绍request,我本人是打算做一个系列的爬虫教程不仅仅包括入门还有实战进阶所以我希望浏览我写的博客时可以按顺序浏览学习。那么废话不多说奉上名言 成功没有偶然。 即便有些胜利者谦虚地说,自己的成功是偶然的缘故。—— 尼采 开始正片!!!

urllib 下载

打开cmd命令输入 pip install urllib3 点击回车
python爬虫系列(一)_第1张图片
当然有时候由于pip版本问题可能无法下载不过没关系你只需要输入 python -m pip install --upgrade pip 更新版本之后打开python输入:
import urllib.request
如果没有报错那么恭喜你成功了!

urllib的模块

request: 基本的HTTP请求模块用于模拟发送请求
error: 异常处理模块
parse: 用于处理URL比如拆分,解析,合并,data参数等
robotparser: 用于识别网站的robot.txt文件,判断网站是否可以爬取

urllib.request

urllib.request的方法有:
urlretrieve() 下载文件
urlcleanup() 释放缓存
urlopen() 发送请求get
这里我们实战一下

            
              
                import
              
               urllib
              
                .
              
              request 
              
                as
              
               u
r
              
                =
              
              u
              
                .
              
              urlopen
              
                (
              
              
                'https://123.sogou.com/'
              
              
                )
              
              
u
              
                .
              
              urlcleanup
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              r
              
                .
              
              read
              
                (
              
              
                )
              
              
                .
              
              decode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                )
              
            
          

urlopen()返回了一个可读的对象之后我们将其解码为‘utf-8’
之后我们可以读取出网站的源代码。之后对其进行分析以后
我们在对其html进行详细解释

常见报错

前面我们已经说了 print(r.read().decode('utf-8')) 可得到网站源码
然如果没猜错的话当你运行上述代码时可能会遇到如下报错
在这里插入图片描述

当然如果你没有遇到那么,,看看也无妨。 具体是怎么回事呢其实很简单,出现异常报错是由于设置了decode()方法的第二个参数errors为严格(strict)形式造成的,而这个是它默认的模式所以改个模式就好啦如下:

            
              print(r.read().decode('utf-8','ignore'))

            
          

python爬虫系列(一)_第2张图片
ok! 当你也这样之后恭喜你成功了!不过还没完!!!

urlopen 方法

info 获取当前内容状态
getcode 输出状态码
geturl 获取当前网址

            
              print(r.info())
print(r.getcode())
print((r.geturl()))


            
          

效果 python爬虫系列(一)_第3张图片
完整代码

            
              
                import
              
               urllib
              
                .
              
              request 
              
                as
              
               u
r
              
                =
              
              u
              
                .
              
              urlopen
              
                (
              
              
                'https://123.sogou.com/'
              
              
                )
              
              
u
              
                .
              
              urlcleanup
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              r
              
                .
              
              read
              
                (
              
              
                )
              
              
                .
              
              decode
              
                (
              
              
                'utf-8'
              
              
                ,
              
              
                'ignore'
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              r
              
                .
              
              info
              
                (
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              r
              
                .
              
              getcode
              
                (
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              
                (
              
              r
              
                .
              
              geturl
              
                (
              
              
                )
              
              
                )
              
              
                )
              
            
          

那么今天就这样吧。等等来个结束福利!

实战示例(福利)

` python爬虫系列(一)_第4张图片

            
              
                import
              
               urllib
              
                .
              
              request

              
                import
              
               re
html 
              
                =
              
               urllib
              
                .
              
              request
              
                .
              
              urlopen
              
                (
              
              r
              
                'http://www.weather.com.cn/weather/101240701.shtml'
              
              
                )
              
              
urllib
              
                .
              
              request
              
                .
              
              urlcleanup
              
                (
              
              
                )
              
              
read 
              
                =
              
               html
              
                .
              
              read
              
                (
              
              
                )
              
              
                .
              
              decode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                def
              
              
                get_way
              
              
                (
              
              path
              
                ,
              
              string
              
                )
              
              
                :
              
              
    path_way
              
                =
              
              path
    path_get
              
                =
              
              re
              
                .
              
              
                compile
              
              
                (
              
              path_way
              
                )
              
              
    ture_key
              
                =
              
              path_get
              
                .
              
              findall
              
                (
              
              string
              
                ,
              
              re
              
                .
              
              M
              
                )
              
              
                return
              
              
                str
              
              
                (
              
              ture_key
              
                )
              
              
path_html
              
                =
              
              
                '
                
                
see_html
                
                  =
                
                get_way
                
                  (
                
                path_html
                
                  ,
                
                read
                
                  )
                
                
path_see
                
                  =
                
                
                  'v.*°C'
                
                
see_weather
                
                  =
                
                get_way
                
                  (
                
                path_see
                
                  ,
                
                see_html
                
                  )
                
                
day
                
                  =
                
                get_way
                
                  (
                
                
                  '.*日'
                
                
                  ,
                
                see_weather
                
                  )
                
                
                  .
                
                strip
                
                  (
                
                
                  '[\"\']'
                
                
                  )
                
                
weather
                
                  =
                
                get_way
                
                  (
                
                
                  '周.*°C'
                
                
                  ,
                
                see_weather
                
                  )
                
                
                  .
                
                strip
                
                  (
                
                
                  '[\']'
                
                
                  )
                
                
                  print
                
                
                  (
                
                weather
                
                  )
                
              
            
          

http://www.weather.com.cn/weather/101240701.shtml 天气查询网站。
得嘞 拜了个拜!下次表达式基础语法(用性命担保这个实战示例绝对没有超出今天内容)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论