Python爬虫之web内容获取(一)

Python爬虫之web内容获取:html

  • 一:简单的向服务器发送请求方式:python

    # -- coding:utf-8 --
    ​
    import urllib2
    ​
    向指定的url 发送请求,并返回响应的类文件对象
    ​
    response = urllib2.urlopen("http://www.baidu.com")
    ​
    服务器返回的对象支持python文件对象的方法
    ​
    read()方法:读取文件的所有类容,返回字符串
    ​
    html = response.read()
    ​
    print html

    但这样的方式每每容易被反爬虫者发现,所以咱们须要进一步的假装。web

  • 反爬虫第一步:json

首先,咱们须要了解浏览器在向服务器发送请求时作了什么:这里咱们能够用Fiddler抓包工具来实现下载安装配置好Fiddler(具体配置方法)后,当咱们浏览器端向服务器发送请求时(如在浏览器访问http://www.baidu.com),在Fiddler抓包工具抓到的文件中对应的百度连接的文件所对应的此处便能获得以下的Header请求信息。浏览器

        

Fiddler抓包工具Header请求信息服务器

# 请求方式(GET / POST /...)
GET https://www.baidu.com?&t=1520930345744&sid=1455_13549_21088_20928 HTTP/1.1
​
# 指定被请求资源的Internet主机和端口号
Host: www.baidu.com
​
# 连接方式( keep-alive / close /...)
Connection: keep-alive
​
# 浏览器端能够接受的媒体类型
Accept: text/plain, /; q=0.01
X-Requested-With: XMLHttpRequest
​
# User-Agent告诉HTTP服务器, 客户端使用的操做系统和浏览器的名称和版本
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Referer: https://www.baidu.com/
​
# 览器申明本身接收的编码方法,一般指定压缩方法
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
​
#本地Cookie信息
Cookie: BAIDUID=955895CE3A39E426AF6E5CF53F2B:FG=1; BIDUPSID=955895CE3A39E426AF53F2B;

拿到浏览器请求的Header信息后,接下来咱们即可以模拟浏览器访问服务器了以下:工具

  • 模拟get请求:post

    # -*- coding:utf-8 -*-
    from urllib import request,parse
    ​
    url = "http://www.baidu.com/s"
    kwd = input("请输入须要查询的关键字:")
    wd = {"wd":kwd}
    #将一个字典类型的数据转化为字符串类型(url:  "wd=875398%jsjdj%")
    wd = parse.urlencode(wd)
    ​
    fill_url = url + "?" + wd
    ​
    header = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
    }
    ​
    #经过urllib2.Resquest()方法构造一个请求对象
    req = request.Request(fill_url,headers = header)
    ​
    #向指定的url 发送请求,并返回响应的类文件对象
    response = request.urlopen(req)
    #服务器返回的对象支持python文件对象的方法
    #read()方法:读取文件的所有类容,返回字符串
    html = response.read()
    ​
    print(html)
  • 模拟post请求\利用本地Cookie获取须要登录后才能获取的内容:ui

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    ​
    from urllib import request,parse
    #import json
    ​
    url = "https://mail.qq.com/cgi-bin/frame_html?t=frame_html&sid=3-L3dxbAFqMTDGY8&url=/cgi-bin/mail_list?folderid=8%26folderkey=8%26page=0%26t=mail_list_group%26ver=236935.0%26cachemod=maillist%26cacheage=7200%26r="
    ​
    header = {
        "Host": "mail.qq.com",
        "Connection": "keep-alive",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like     Gecko) Chrome/64.0.3282.186 Safari/537.36",
        "Accept": "image/webp,image/apng,image/*,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cookie": "RK=k0HCcQgeOg; pgv_pvi=4384783360; tvfe_boss_uuid=e72e765a79d2f90f; 。。。*",
    }
    req = request.Request(url,headers = header)
    print(request.urlopen(req).read().decode('utf-8'))
  • 获取 Ajax 加载的 json 数据:编码

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    ​
    from urllib import request,parse
    import json
    ​
    url  = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action"
    ​
    header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}
    ​
    formData = {
        "start":"0",
        "limit":"5"
    }
    ​
    data = parse.urlencode(formData).encode('UTF-8')
    ​
    ​
    req = request.Request(url,data = data,headers = header)
    ​
    print(request.urlopen(req).read().decode('UTF-8'))