Python篇----Requests獲取網頁原始碼(爬蟲基礎)
阿新 • • 發佈:2019-01-03
1 下載與安裝
見其他教程。
2 Requsts簡介
Requests is an Apache2 Licensed HTTP library, written inPython, for human beings.
Python’s standard urllib2 module provides most ofthe HTTP capabilities you need, but the API is thoroughlybroken.It was built for a different time — and a different web. It requires anenormous
3 獲取網頁原始碼(Get方法)
- 直接獲取原始碼
- 修改Http頭獲取原始碼
直接獲取:
import requests
html = requests.get('http://www.baidu.com')
print html.text
修改http頭:
import requests import re #下面三行是編碼轉換的功能 import sys reload(sys) sys.setdefaultencoding("utf-8") #hea是我們自己構造的一個字典,裡面儲存了user-agent。 #讓目標網站誤以為本程式是瀏覽器,並非爬蟲。 #從網站的Requests Header中獲取。【審查元素】 hea = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'} html = requests.get('http://jp.tingroom.com/yuedu/yd300p/',headers = hea) html.encoding = 'utf-8' #這一行是將編碼轉為utf-8否則中文會顯示亂碼。 print html.text
4 帶正則表示式的提取
<pre name="code" class="python">import requests
import re
#下面三行是編碼轉換的功能
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
#hea是我們自己構造的一個字典,裡面儲存了user-agent。
#讓目標網站誤以為本程式是瀏覽器,並非爬蟲。
#從網站的Requests Header中獲取。【審查元素】
hea = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
html = requests.get('http://jp.tingroom.com/yuedu/yd300p/',headers = hea)
html.encoding = 'utf-8' #這一行是將編碼轉為utf-8否則中文會顯示亂碼。
#此為正則表示式部分。找到規律,利用正則,內容就可以出來
title = re.findall('color:#666666;">(.*?)</span>',html.text,re.S)
for each in title:
print each
chinese = re.findall('color: #039;">(.*?)</a>',html.text,re.S)
for each in chinese:
print each<pre>
5 向網頁提交資料(Post方法)
第二幅圖:
此處構造表單,就是下面程式碼中data的部分,用的字典。為什麼要改字典裡面的page數字?因為,目標網站採用非同步載入方式,不是一次性載入你所需要爬取的全部內容,所以要一頁一頁的爬去(改數)。
程式碼中爬取的是目標網址的公司名稱,title。
程式碼展示(含原理解釋):
#-*-coding:utf8-*-
import requests
import re
#需要使用Chrome瀏覽器中的:審查元素->Network
#很多資訊,如url、page、提交方法等都必須從裡得到
#原來的目標網址,但不能作為目標url
# url = 'https://www.crowdfunder.com/browse/deals'
#Post表單向此連結提交資料
url = 'https://www.crowdfunder.com/browse/deals&template=false'
#get方法比較
# html = requests.get(url).text
# print html
#注意這裡的page後面跟的數字需要放到引號裡面。
#page的資料可以改動
data = {
'entities_only':'true',
'page':'2'
}
html_post = requests.post(url,data=data)
title = re.findall('"card-title">(.*?)</div>',html_post.text,re.S)
for each in title:
print each
資料摘自極客學院