简单爬虫入门

  • 一、爬虫定义
    • 网络爬虫(又被称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
    • 另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
  • 二、使用python做爬虫的好处
    • 1.php 对多线程、异步支持不够好,并发处理能力很弱。爬虫是工具性程序,对速度和效率要求比较高。
    • 2.Java 语言本身很笨重,代码量很大。  重构成本比较高,任何修改都会导致代码的大量变动。爬虫经常需要修改部分采集代码。
    • 3.C/C++语言 运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢。  能用C/C++做爬虫,只能说是能力的表现
    • 4.python 语法优美、代码简洁、开发效率高、支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富。 还有强大的爬虫Scrapy框架,以及成熟高效的 scrapy-redis分布式策略
  • 三、爬虫原理
    • 爬虫是模拟用户在浏览器或者某个应用上的操作,把操作的过程、实现自动化的程序。来获得服务器的响应数据
  • 四、HTTP的请求与响应
    • 1.http会话
      • 1)当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
      • 2)当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。
      • 3)浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
      • 4)当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。
  • 五、cookie 和 session
    • 服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。
    • 为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
    • Cookie:通过在 客户端(一般是浏览器) 记录的信息确定用户的身份。
    • Session:通过在 服务器端 记录的信息确定用户的身份。
  • 六、token
    • 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
    • 1.客户端使用用户名跟密码请求登录
    • 2.服务端收到请求,去验证用户名与密码
    • 3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
    • 4.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
    • 5.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
    • 6.服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据.
  • 七、urllib.request 的使用 python3
    • 1.get请求
      • import urllib.request
      • #urlopen()函数,url是必须要传入的,data如果传入就是POST请求,如果不传就是GETT请求
      • response = urllib.request.urlopen("https://www.baidu.com/")
      • #服务器返回的数据,读取里面的全部内容
      • response_data = response.read()
      • #打印返回的数据
      • print(response_data.decode("utf-8"))
    • 2.post请求
      • urllib.request.urlopen("http://www.baidu.com/",data="s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=美女".encode("utf-8"))
    • 3.Request-封装请求头信息
      • from urllib.request import Request,urlopen
      • headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
      • request = Request("http://www.atguigu.com",headers=headers)
      • # request.add_headers('User-Agent','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;')  #也可以这样添加请求头
      • #可以通过调用request.get_header('User-agent')来查看已有的header。   第一个字母大写,后面的全部小写,否则获取不了
      • response = urlopen(request)
      • #response.getcode()得到响应码
      • #url = response.geturl()  返回实践数据的url,防止重定向
      • # info = response.info() 返回服务器的响应报头信息
      • response_data = response.read()
      • print(response_data.decode("utf-8"))
    • 4.随机修改user-agent    目的就是模拟不同的客户端,让服务器以为是不同的用户,不封ip
      • headers = [
        • "Mozilla/5.0 (Windows NT 6.1; ) Apple.... ",
        • "Mozilla/5.0 (X11; CrOS i686 2268.111.0)... ",
        • "Mozilla/5.0 (Macintosh; U; PPC Mac OS X.... ",
        • "Mozilla/5.0 (Macintosh; Intel Mac OS... "
      • ]
      • user_agent = random.choice(headers)
      • request.add_header("User-Agent", user_agent)
    • 5. urllib.urlencode()
      • 一般HTTP请求提交数据,需要编码成 URL编码格式,然后做为url的一部分,或者作为参数传到Request对象中。
      • from urllib import parse
      • #把中文转换成url编码
      • wd = {"wd":"美女"}
      • #需要使用urllib模块的parse函数
      • urlencode = parse.urlencode(wd)
      • #转换后的值:wd=%E5%B0%9A%E7%A1%85%E8%B0%B7
      • print(urlencode)
      • #解url编码
      • decode = parse.unquote("wd=%E5%B0%9A%E7%A1%85%E8%B0%B7")
      • print(decode)
      • GET 方式请求 把编码后的拼接到url
      • POST
        • data ={"name":"zhangsan","age":"18"}
        • data= urlencode(data).encode("utf-8")
        • response = urllib.request.urlopen(url,data=data)
    • 6. 处理HTTPS请求 SSL证书验证
      • https和SSL之间是什么关系:https就是在http上面加了一层ssl协议,在http站点上部署SSL数字证书就变成了https。
      • 如果SSL证书验证不通过,或者操作系统不信任服务器的安全证书,比如浏览器在访问12306网站如:https://www.12306.cn/mormhweb/的时候,会警告用户证书不受信任。(12306 网站证书是自己做的,没有通过CA认证)
      • 代码在访问的时候则会报出SSLError:
      • 解决方法
      • import ssl
      • context = ssl._create_unverified_context()  #表示忽略未经核实的SSL证书认证
      • ........
      • response = urlopen(request,context=context)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值