import urllib.robotparser as rparser
defischeckrobots
(user_agent,robots_url, url):
'''檢查robots.txt'''
rp = rparser.robotfileparser()
rp.set_url(robots_url)
rp.read()
return rp.can_fetch("*", url)
其實就是重新設定一下 user_agent
伺服器返回碼為 4xx 時說明 請求 存在錯誤,
def
gethtmltext
(url, encoding = 'utf-8', user_agent = 'mozilla/5.0', new_time_out = 3, num_retries = 2, isneedcheckrobots = false, robots_url = none):
'''獲取資訊'''
if isneedcheckrobots:
if ischeckrobots(user_agent, robots_url, url) is
false:
return
'robots.txt 不允許'
try:
headers =
r = requests.get(url, timeout = new_time_out, headers = headers)
r.encoding = encoding
r.raise_for_status()
return r.text
except:
if r.status_code >= 500
and r.status_code <= 600
and num_retries > 0:
return gethtmltext(url, encoding, new_time_out, num_retries - 1)
return
在兩次相同網域名稱的 url 請求下加入延遲,以免爬取**的速度過快被伺服器封禁
import time
import datetime
from urllib import parse
class
throttle
():'''在同個網域名稱請求加入延時'''
def__init__
(self, delay):
# 延時時間
self.delay = delay
# 最後一次訪問網域名稱的時間戳
self.domain = {}
defwait
(self, url):
domain = parse.urlparse(url).netloc
last_visit = self.domain.get(domain)
if self.delay > 0
and last_visit is
notnone:
sleep_secs = self.delay - (datetime.datetime.now() - last_visit).seconds
if sleep_secs > 0:
time.sleep(sleep_secs)
self.domain[domain] = datetime.datetime.now()
爬取網頁資料 插敘 爬取網頁資料,給寶寶取個好名字
前言 應用例項 匯入模組import requestsfrom bs4 import beautifulsoup 填寫頭請求,包括爬取網頁 headers result 暫定爬取9頁名字for i in range 1,10 url str i html r requests.get url,hea...
java網頁資料爬取
在瀏覽器書籤中有許多經典的東西,有時候什麼忘記了需要去查詢的,也非常方便,但是痛苦的事情是某一天開啟書籤,居然那個頁面不知道飛哪去了,打不開,作為乙個程式設計師,當然不能容忍這種事情發生,那就把它們都爬下來。首先我們的書籤可能有幾種分類,為了處理方便,可以手動刪除我們不需要的,也可以程式處理一下 以...
nodeJs爬取網頁資料
發現node可以爬蟲,正好我在找暑期實習,然後就使用node爬一下 資料找實習。爬取目標 載入http模組 目標 嘿嘿,這個 有很多實習職位 http的get請求乙個目標 函式的引數是response,繫結兩個事件,乙個 data 事件,會不斷觸發獲取資料,資料獲取完觸發 end 事件。爬到的的資料...