網頁爬取系列(一)爬取網頁資料的一些小技巧

2021-08-01 02:46:37 字數 1755 閱讀 7741

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 事件。爬到的的資料...