url:
url主要有三部分組成:
(1)協議,常見的協議有http,https,ftp,file(訪問本地資料夾),ed2k(電驢的專用鏈結)等等。
(2)存放資源的伺服器的網域名稱系統(dns)主機名或者ip位址(有時候包含埠號,各種傳輸協議都有預設的埠號)
(3)主機資源的具體位址,如目錄和檔名等
注意:第一部分和第二部分用"://"符號隔開的,
第二部分和第三部分用"/"符號隔開的,
第一部分和第二部分是不可缺少的,第三部分有時候可以省略。
urllib:
爬取網頁:
f.write(html)注意:
(1)urlopen的url引數即可以是乙個字串也可以是乙個request物件,如果你傳入是乙個字串,那麼python是會預設幫你
把目標字元轉換成request物件,然後在傳入urlopen函式,如上述注釋**所示。
(2)urlopen實際上返回的是乙個類檔案物件,因此你可以用read()方法來讀取內容,他還有以下三個函式會用到。
1.geturl()--返回請求的url
2.info()--返回乙個httplib,httpmessage物件,包含遠端伺服器返回的頭資訊。
3.getcode()--返回http狀態碼
隱藏身份:
useragent:
對於一些伺服器來說是不願意讓爬蟲進行爬去的,這樣伺服器的壓力就會增加,伺服器一般是通過user-agent來識別 的,普通瀏覽器會通過該內容向訪問**提供你所使用的瀏覽器型別、作業系統、瀏覽器核心等資訊的標識。
修改user-agent:
例項化request物件的時候將headers引數傳進去或者通過add_header()方法往request物件新增headers,如:
import urllib.request
import urllib.parse
head={}
head["referer"] = ""
head["user-agent"] = ""
data = {}
data["type"] = ""
data["keyform"] = ""
data = urllib.parse.urlencode(data).encode("utf-8")
req = urllib.request.request(url,data,head)
# req = urllib.request.request(url,data)
# req.add_header('referer','')
# req.add_header('user-agent','')
urllib.request.urlopen(req)
注意:如果長時間靠修改user-agent進行抓取,那麼乙個ip短時間內連續進行網頁的訪問,很可能會被服務
器識別是機器抓取,所以,這裡有兩種策略可供選擇:
第一種就是延遲提交的時間,但是這樣會使得工作效率低下。
第二種策略就是使用**。
使用**:
使用**ip,伺服器看到的是**ip位址,而不是你自己的ip位址。
proxy_support = urllib.request.proxyhandler()
引數是乙個字典,字典的鍵是**的型別,字典的值就是**的ip位址和對應的埠號。
opener = urllib.request.build_opener(proxy_support)
opener可以看作是乙個私人訂製,當使用urlopen()函式開啟乙個網頁的時候,你就是使用預設的opener在工作
所以這裡使用build_opener()函式建立了乙個屬於我們自己私人定製的opener
urllib.request.install_opener(opener)
這裡將制定好的opener安裝到系統中,這是一勞永逸的做法
因為在此之後,你只需要使用普通的urlopen()函式,就是以定製好的opener進行工作的。
如果你不想替換掉預設的opener,你也可以每次特殊需要的時候,用opener.open()的方法來開啟網頁。
beautiful soup:iplist = input("請輸入ip:").split(sep=";")
iplist = input("請輸入ip:").split(sep=";")ip = random.choice(iplist) #隨機使用ip
ip = random.choice(iplist) #隨機使用ip
安裝beautiful soup:
開啟cmd,執行命令: python3 -m pip install beautifulsoup4
在ide下from bs4 import beautifulsoup,沒有報錯說明安裝成功
使用beautiful soup:
from bs4 import beautifulsoup
html = response.read().decode('utf-8')
soup = beautifulsoup(html,'html.parser')
for each in soup.find_all(""):
print(each)
正規表示式:
網上查資料
python爬蟲簡單 python爬蟲 簡單版
學過python的帥哥都知道,爬蟲是python的非常好玩的東西,而且python自帶urllib urllib2 requests等的庫,為爬蟲的開發提供大大的方便。這次我要用urllib2,爬一堆風景。先上重點 1 response urllib2.urlopen url read 2 soup...
python爬蟲入門簡單爬蟲
coding utf 8 from bs4 import beautifulsoup,soupstrainer from threading import lock,thread import sys,time,os from urlparse import urlparse,urljoin fro...
Scrapy 簡單爬蟲中遇到的問題總結
在進行item傳參時總是出現重複資料 在scrapy資料爬取中發現通過以下語句傳遞的引數會出現重複現象,導致爬取的資料出現重複和錯亂的現象。yield scrapy.request item url meta callback self.detail parse 為了解決以上問題,找到 scrapy...