爬蟲主要分為兩個部分,第乙個是網頁介面的獲取,第二個是網頁介面的解析;爬蟲的原理是利用**模擬瀏覽器訪問**,與瀏覽器不同的是,爬蟲獲取到的是網頁的源**,沒有了瀏覽器的翻譯效果。
這裡我們使用urllib2進行**頁面的獲取;首先匯入urllib2模組包
import urllib2
呼叫urllib2中的urlopen方法鏈結**,**如下repr=urllib2.urlopen("******"),******代表的是**名稱。
repr = urllib2.urlopen("")
得到**的響應之後,然後就是將頁面的源**讀取出來,呼叫read方法
html=repr.read()
將自己想要的資料從html介面源**中解析出來,解析介面的模組包有很多,原始的re
import re
進行利用re進行搜尋,這裡我有使用正規表示式
url = re.search(r'
print url
url管理器:用來管理將要抓取的url和已經抓取過的
-防止重複抓取,防止迴圈抓取
-新增新的url到待爬取集合中,判斷待新增url是否在容器中
-判斷是否有待爬取url,獲取待爬取url,將url從待爬取移動到已爬取
--儲存1-記憶體中包含待爬取url集合set()和已爬取url集合set(),可自動去重
--儲存2-關係型資料庫中mysql中包含表urls(url,is_crawled)
--儲存3-快取資料庫中redis包含待爬取url集合set和已爬取的url集合set
--urllib2 為python官方基礎模組
--requests 為第三方包更強大
例項1:import urllib2 --匯入包
response = urllib2.urlopen("www.baidu.com") --請求
print response.getcode() --獲取狀態碼,如果是200代表成功
response.read()
例項2:import urllib2 --匯入包
request = urllib2.request(url) --建立request物件
request.add_data('a',1) --新增資料
request.add_header('user-agent','mozilla/5.0')--新增header,偽裝成mozilla瀏覽器
response = urllib2.urlopen(request)傳送請求獲取結果
特殊情景
1-需要登陸的**則用 httpcookieprocessor
2-需要**的**則用 proxyhandler
3-需要https協議登陸**則用httpshandler
4-需要自動跳轉**則用httpredirecthandler
先呼叫opener = urllib2.build_opener(1/2/3/4)
urllib2.install_opener(opener)
import urllib2, cookielib
cj = cookielib.cookiejar() --建立cookie容器
opener = urllib2.build_opener(urllib2.httpcookieprocessor(cj))--建立opener
urllib2.install_opener(opener) --安裝opener
response = urllib2.urlopen("/")傳送請求獲取結果
網頁解析器:beautifulsoup
--從網頁中提取有價值資料的工具,包括資料和新的url
1-正規表示式 模糊匹配
2-官方 html.parser 結構化解析
3-第三方 beautifulsoup 強大結構化解析,包括2/3/4 功能
4-第三方 lxml 結構化解析
beautifulsoup語法
建立beautifulsoup物件--》搜尋節點find_all,find--》訪問節點名稱,屬性,文字
爬蟲:一段自動抓取網際網路資訊的程式
從乙個url出發,自動提取關聯url的程式
價值:網際網路資料,為我所用,分析爬取的資料
目標位址
links = soup.find_all('a', href=re.compile(r"/item/(.*)"))
使用的python3.5,在window下,我在除錯的時候遇到裡編碼出錯的問題,找了很久,終於解決裡。這此分享出來,給可能遇到同樣問題的同學。 當把抓取出來的內容顯示在網頁上時,這個地方是出錯的關鍵點。在windows下面,新檔案的預設編碼是gbk,這樣的話,python直譯器會用gbk編碼去解析我們的網路資料流txt,然而txt此時已經是decode過的unicode編碼,這樣的話就會導致解析不了,出現問題。應寫為: fout = open('output.html','w',encoding='utf-8') 同時在html中宣告
Python爬蟲學習 持續更新
當伺服器通過request的header中的使用者資訊防止爬取時,修改header改為乙個瀏覽器就好 import requests from bs4 import beautifulsoup kv r requests.get headers kv print r.encoding soup be...
python爬蟲scrapy(持續更新)
pip install scrapy scrapy startproject stock 建立資料夾 scrapy genspider stock xx 網域名稱 建立爬蟲py檔案 scrapy crawl stock o json spider中必須包含stock.py檔案 scrapy craw...
Python 爬蟲 坑 持續更新中
記錄下學習爬蟲中遇到的坑 python2要支援中文需要在頭部新增 coding utf 8 python3直接支援中文 python2中直接可以呼叫urllib2 python3中需要 from urllib import requestpython2中直接可以獲取response的文字 pytho...