官术网_书友最值得收藏!

2.2 數據抓取實踐

2.2.1 請求網頁數據

1.發起請求

先看下面這段代碼。

    import requests

    url = 'http://www.douban.com'
    data = requests.get(url)
    print(data.text)

運行輸出如下(截取部分)。

    <! DOCTYPE HTML>
    <html lang="zh-cms-Hans" class="">
    <head>
    <meta charset="UTF-8">
    <meta name="description" content="提供圖書、電影、音樂唱片的推薦、評論和價格比較,以
    及城市獨特的文化生活。">
    <meta name="keywords" content="豆瓣,廣播,登錄豆瓣">
    <meta property="qc:admins" content="2554215131764752166375" />
    <meta property="wb:webmaster" content="375d4a17a4fa24c2" />
    <meta name="mobile-agent" content="format=html5; url=https://m.douban.com">
    <title>豆瓣</title>

下面進行簡要說明。

●import requests

調入需要的庫requests。

●url = '

將變量url賦值為豆瓣的網址。

●data = requests.get(url)

利用requests庫的get方法,向此URL(即豆瓣首頁)發起請求,并將服務器返回的內容存入變量data。

●print(data.text)

打印服務器返回的內容。從打印內容來看,已經請求成功。

注意:這里使用requests.get請求網頁數據,涉及向網站提交表單數據的時候,如登錄豆瓣等網站,我們還會用到post方法,這個之后還會介紹。

至此,發起請求的部分已經完成一大部分了。為什么不是全部呢?細心的讀者已經發現,這里并沒有設置UA進行偽裝,但是仍然得到了網頁內容。但是在有些情況下,不設置UA會出現錯誤。

2.設置UA進行偽裝

那么,如何設置UA進行偽裝呢?這里介紹一個網址,http://httpbin.org/get,它會返回一些關于請求頭的信息。下面是筆者訪問時返回的內容。

    {
      "args": {},
      "headers": {
        "Accept": "text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=
    0.8",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "en-US, en; q=0.5",
        "Connection": "close",
        "Host": "httpbin.org",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20
    100101 Firefox/52.0"
      },
      "origin": "45.77.19.213",
      "url": "http://httpbin.org/get"
    }

可以看到返回的UA如下。

"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"

下面仍然利用之前的請求代碼,只是地址改為這個網址,再次查看UA。

    import requests

    url = 'http://httpbin.org/get'
    data = requests.get(url)
    print(data.text)

運行輸出如下。

    {
      "args": {},
      "headers": {
        "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.9.1"
  },
  "origin": "113.58.87.225",
  "url": "http://httpbin.org/get"
}

此時UA如下所示。

"User-Agent" : "python-requests/2.9.1"

顯然,在沒有UA的偽裝下,服務器很容易就能識別出對方是一只網絡爬蟲的,所以有些網站在發現請求來自網絡爬蟲時將直接拒絕請求。為了偽裝,可以通過下面的方式設置UA的偽裝。

    import requests

    url = 'http://httpbin.org/get'
    # headers里面大小寫均可
    headers = {'User-Agent': "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) G
    ecko/20100101
    Firefox/52.0"}
    data = requests.get(url, headers=headers)
    print(data.text)

運行輸出如下。

    {
      "args": {},
      "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate",
        "Connection": "close",
        "Host": "httpbin.org",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20
  100101 Firefox/52.0"
    },
    "origin": "113.58.87.225",
    "url": "http://httpbin.org/get"
  }

可以看到,此時的UA和用瀏覽器請求的UA是一樣的,說明已經偽裝成功。而UA的獲取也十分簡單,在任意網頁空白處單擊鼠標右鍵→選擇“檢查元素”→選擇“Network”選項→選中一個請求(沒有則刷新網頁)→選擇右側“Header”選項,可以看到下方UA,如圖2-2所示。

圖2-2

至此,已經能夠完成網頁的請求,并進行簡單的偽裝了!

注意:這里通過設置headers,并以參數形式傳入requests的get函數進行偽裝。headers是字典的形式。

主站蜘蛛池模板: 枞阳县| 呈贡县| 三河市| 琼中| 巴彦淖尔市| 鄯善县| 虞城县| 德昌县| 卓资县| 潼南县| 东丰县| 邵东县| 广饶县| 太湖县| 西乌珠穆沁旗| 永川市| 连南| 永宁县| 琼结县| 汝南县| 桦川县| 叶城县| 塔河县| 尉氏县| 甘德县| 延寿县| 永和县| 包头市| 盖州市| 焦作市| 扎鲁特旗| 芜湖市| 达拉特旗| 夏邑县| 沈丘县| 安阳县| 封开县| 桓仁| 准格尔旗| 蓬莱市| 永济市|