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'))