中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

做色情網站多久會被抓網絡營銷服務

做色情網站多久會被抓,網絡營銷服務,包頭網站制作公司,公司自建網站備案目錄 1.Robots排除協(xié)議 2.request庫的使用 3.beautifulsoup4庫的使用 Python網絡爬蟲應用一般分為兩部: (1)通過網絡連接獲取網頁內容 (2)對獲得的網頁內容進行處理 - 這兩個步驟分別使用不同的函數(shù)庫:requests …

目錄

1.Robots排除協(xié)議

2.request庫的使用

3.beautifulsoup4庫的使用


Python網絡爬蟲應用一般分為兩部:

(1)通過網絡連接獲取網頁內容

(2)對獲得的網頁內容進行處理

- 這兩個步驟分別使用不同的函數(shù)庫:requests 和beautifulsoup4

1.Robots排除協(xié)議

Robots 排除協(xié)議(Robots Exclusion Protocol),也被稱為爬蟲協(xié)議,它是網站管理者表達是否希望爬蟲自動獲取網絡信息意愿的方法。管理者可以在網站根目錄放置一個robots.txt 文件,并在文件中列出哪些鏈接不允許爬蟲爬取。一般搜索引擎的爬蟲會首先捕獲這個文件,并根據文件要求爬取網站內容。Robots 排除協(xié)議重點約定不希望爬蟲獲取的內容,如果沒有該文件則表示網站內容可以被爬蟲獲得,然而,Robots 協(xié)議不是命令和強制手段,只是國際互聯(lián)網的一種通用道德規(guī)范。絕大部分成熟的搜索引擎爬蟲都會遵循這個協(xié)議,建議個人也能按照互聯(lián)網規(guī)范要求合理使用爬蟲技術。

2.request庫的使用

request 庫支持非常豐富的鏈接訪問功能,包括:國際域名和URL 獲取、HTTP 長連接和連接緩存、HTTP 會話和Cookie 保持、瀏覽器使用風格的SSL 驗證、基本的摘要認證、有效的鍵值對Cookie 記錄、自動解壓縮、自動內容解碼、文件分塊上傳、HTTP(S)代理功能、連接超時處理、流數(shù)據下載等。

有關requests庫的更多介紹可看:

Requests: HTTP for Humans? — Requests 2.31.0 documentation

(1)安裝request庫

pip install requests 或 pip3 install requests

?(2)request庫中的請求函數(shù)

函數(shù)描述
get(url[,timeout=n])對應于HTTPGET方式,獲取網頁最常用的方法,可以增加timeout=n參數(shù),設定每次請求超時時間為n
post(url,data={‘key’:’value’})對應于HTTPPOST方式,其中字典用于傳遞客戶數(shù)據
delete(url)向網頁提交刪除請求
head(url)獲取html網頁頭信息
options(url)對應于HTTPOPTIONs方式
put(url, data={‘key’:’value’})向網頁提交put請求,其中字典用于傳遞客戶數(shù)據

(3)get的用法

get()是獲取網頁最常用的方式,在調用requests.get()函數(shù)后,返回的網頁內容會保存為一個Response 對象,其中,get()函數(shù)的參數(shù)url必須采用HTTP 或HTTPS方式訪問

>>> import requests
>>> r = requests.get('http://www.baidu.com')#使用get方法打開鏈接
>>> type(r)
requests.models.Response   #返回Response對象

(4)response對象的屬性

?和瀏覽器的交互過程一樣,requests.get()代表請求過程,它返回的Response 對象代表響應,Response 對象的屬性如下表所示,需要采用<a>.<b>形式使用。

?status_code 屬性返回請求HTTP 后的狀態(tài),在處理數(shù)據之前要先判斷狀態(tài)情況,如果請求未被響應,需要終止內容處理。

?text 屬性是請求的頁面內容,以字符串形式展示。

?encoding 屬性非常重要,它給出了返回頁面內容的編碼方式,可以通過對encoding 屬性賦值更改編碼方式,以便于處理中文字符。

?content 屬性是頁面內容的二進制形式。

?json()方法能夠在HTTP 響應內容中解析存在的JSON 數(shù)據,這將帶來解析HTTP的便利。

?raise_for_status()方法能在非成功響應后產生異常,即只要返回的請求狀態(tài)status_code 不是200,這個方法會產生一個異常,用于try…except 語句。只需要在收到響應調用這個方法,就可以避開狀態(tài)字200 以外的各種意外情況。

表格總結如下:

函數(shù)描述
status_codeHTTP請求的返回狀態(tài),整數(shù),200表示連接成功,404表示失敗
textHTTP響應內容的字符串形式,即,也是url對應的頁面內容
encodingHTTP響應內容的編碼方式
content

HTTP響應內容的二進制形式

json()如果HTTP響應內容包含JSON格式數(shù)據,該方法解析JSON數(shù)據

raise_for_status()

如果不是200,那么這個方法就會產出異常

示例:

>>> import requests
>>> r = requests.get('http://www.baidu.com')
>>> r.status_code   #返回狀態(tài)
200
>>> r.text   #觀察返回的內容,中文字符能否正常顯示
(輸出略)
>>> r.encoding
'ISO-8859-1'
>>> r.encoding = 'utf-8' #更改編碼方式為utf-8
>>> r.text    #更改完成,返回內容中的中文字符可以正常顯示
(輸出略)

(5)requests產生的異常

?當遇到網絡問題時,如:DNS 查詢失敗、拒絕連接等,requests 會拋出ConnectionError 異常;

?遇到無效HTTP 響應時,requests 則會拋出HTTPError 異常;

?若請求url 超時,則拋出Timeout 異常;若請求超過了設定的最大重定向次數(shù),則會拋出一個TooManyRedirects 異常。

(6)獲取一個網頁內容

import requests

def getHTMLText(url):

? ? ? ? try:

? ? ? ? ? ? ? ? r=request.get(url,timeout=30)

? ? ? ? ? ? ? ? r.raise_for_status() #如果狀態(tài)不是200,引發(fā)異常

? ? ? ? ? ? ? ? r.encoding='utf-8'

? ? ? ? ? ? ? ? return r.text

? ? ? ? except:

? ? ? ? ? ? ? ? return ""

url? = "http://www.baidu.com"

print(getHTMLText(url))

HTTP的GET和POST

HTTP 協(xié)議定義了客戶端與服務器交互的不同方法,最基本的方法是GET 和POST。顧名思義,GET 可以根據某鏈接獲得內容,POST 用于發(fā)送內容。然而,GET 也可以向鏈接提交內容。

注:使用 get() 方法訪問百度頁面時,可以通過 text 屬性和 content 屬性來獲取網頁的內容。這兩種方法返回的內容長度可能會有所不同,原因如下:

text 屬性返回的是經過解碼后的字符串內容,通常是按照頁面的字符編碼(比如 UTF-8)進行解析的網頁文本內容。因此,len() 函數(shù)返回的是網頁文本的字符數(shù)。

content 屬性返回的是未經解碼的字節(jié)內容,即網頁的原始字節(jié)數(shù)據。因此,len() 函數(shù)返回的是網頁內容的字節(jié)數(shù)。

由于中文字符通常需要多個字節(jié)來表示,因此在使用 len() 函數(shù)計算時,text 屬性返回的長度通常會大于 content 屬性返回的長度。這就是長度差異產生的主要原因。

3.beautifulsoup4庫的使用

使用requests 庫獲取HTML 頁面并將其轉換成字符串后,需要進一步解析HTML頁面格式,提取有用信息,這需要處理HTML 和XML 的函數(shù)庫。beautifulsoup4 庫,也稱為Beautiful Soup 庫或bs4 庫,用于解析和處理HTML和XML。

需要注意,它不是BeautifulSoup 庫。它的最大優(yōu)點是能根據HTML 和XML 語法建立解析樹,進而高效解析其中的內容。

HTML 建立的Web 頁面一般非常復雜,除了有用的內容信息外,還包括大量用于頁面格式的元素,直接解析一個Web 網頁需要深入了解HTML 語法,而且比較復雜。beautifulsoup4 庫將專業(yè)的Web 頁面格式解析部分封裝成函數(shù),提供了若干有用且便捷的處理函數(shù)。

(1)beautifulsoup4的安裝

pip install beautifulsoup4 或 pip3 install beautifulsoup4

(2)beautifulsoup4的應用

beautifulsoup4 庫采用面向對象思想實現(xiàn),簡單說,它把每個頁面當做一個對象,通過<a>.<b>的方式調用對象的屬性(即包含的內容),或者通過<a>.<b>()的方式調用方法(即處理函數(shù))。

在使用beautifulsoup4 庫之前,需要進行引用,由于這個庫的名字非常特殊且采用面向對象方式組織,可以用from…import 方式從庫中直接引用BeautifulSoup 類,方法如下:

>>> from bs4 import BeautifulSoup

?有關beautifulsoup4庫的使用可以看:

Beautiful Soup: We called him Tortoise because he taught us.

?beautifulsoup4 庫中最主要的是BeautifulSoup 類,每個實例化的對象相當于一個頁面。采用from…import 導入庫中類后,使用BeautifulSoup()創(chuàng)建一個BeautifulSoup對象。

>>> import requests
>>> from bs4 import BeautifulSoup
>>> r = requests.get('http://www.baidu.com')
>>> r.encoding = 'utf-8'
>>> soup = BeautifulSoup(r.text)
>>> print(type(soup))
<class 'bs4.BeautifulSoup'>

?創(chuàng)建的BeautifulSoup 對象是一個樹形結構,它包含HTML 頁面里的每一個Tag(標簽)元素,如<head>、<body>等。具體來說,HTML 中的主要結構都變成了BeautifulSoup 對象的一個屬性,可以直接用<a>.<b>形式獲得,其中<b>的名字采用HTML 中標簽的名字。

?beautifulsoup對象常用屬性:

屬性描述
headHTML頁面的<head>內容
titleHTML頁面標題,在<head>之中,由<title>標記
bodyHTML頁面的<body>內容
pHTML頁面中第一個<p>內容
stringsHTML頁面所有呈現(xiàn)在web上的字符串,即標簽的內容,可迭代
stripped_stringsHTML頁面所有呈現(xiàn)在web上的非空字符串(自動去掉空白字符串),可迭代

示例:

>>> import requests
>>> from bs4 import BeautifulSoup
>>> r = requests.get('http://www.baidu.com')
>>> r.encoding = 'utf-8'
>>> soup = BeautifulSoup(r.text)
>>> soup.head
<head><meta content="text/html;charset=utf-8" (省略...)
>>> title = soup.title
<title>百度一下,你就知道</title>
>>> type(title)
bs4.element.Tag
>>> soup.p
<p id="lh"> <a href="http://home.baidu.com">關于百度</a> 
<a href="http://ir.baidu.com">About Baidu</a> </p>

??Tag標簽

每一個Tag 標簽在beautifulsoup4 庫中也是一個對象,稱為Tag 對象。上例中,title 是一個標簽對象。每個標簽對象在HTML 中都有以下類似的結構:

<a class="mnav" href="http://www.nuomi.com">糯米</a>

其中,尖括號(<>)中的標簽的名字是name,尖括號內其他項是attrs,尖括號之間的內容是string。因此,可以通過Tag 對象的name、attrs 和string 屬性獲得相應內容,采用<a>.<b>的語法形式。

Tag有4個常用屬性:

屬性描述
name?字符串,標簽的名字,比如div
attrs字典,包含了原來頁面Tag所有的屬性,比如href
contents列表,這個Tag下所有子Tag的內容
string字符串,Tag所包圍的文本,網頁中真實的文字

示例:

>>> soup.a
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新聞</a>
>>> soup.a.attrs
{'href': 'http://news.baidu.com', 'name': 'tj_trnews', 'class': ['mnav']}
>>> soup.a.string
'新聞'
>>> title = soup.title
>>> title.string
'百度一下,你就知道'
>>> soup.p.contents
[' ',<a href="http://home.baidu.com">關于百度</a>,' ',<a href="http://ir.baidu.com">About Baidu</a>,' ']

注:

由于HTML 語法可以在標簽中嵌套其他標簽,所以,string 屬性的返回值遵循如下原則:

?如果標簽內部沒有其他標簽,string 屬性返回其中的內容;

?如果標簽內部有其他標簽,但只有一個標簽,string 屬性返回最里面標簽的內容;

?如果標簽內部有超過1 層嵌套的標簽,string 屬性返回None(空字符串)。

?HTML 語法中同一個標簽會有很多內容,例如<a>標簽,百度首頁一共有54 處,直接調用soup.a 只能返回第一個。

查找對應標簽

?當需要列出標簽對應的所有內容或者需要找到非第一個標簽時,需要用到BeautifulSoup 的find()和find_all()方法。這兩個方法會遍歷整個HTML 文檔,按照條件返回標簽內容。

find_all()屬性:

屬性描述
BeautifulSoup.find_all(name, attrs, recursive, string, limit)根據參數(shù)找到對應標簽,返回列表類型。
name: 按照Tag標簽名字檢索,名字用字符串形式表示,例如:dvi, li;
attrs: 按照Tag標簽屬性值檢索,需要列出屬性名稱和值,采用JSON表示;
recursive: 設置查找層次,只查找當前標簽下一層時使用recursive=False
string:按照關鍵字檢索string屬性內容,采用string=開始;
limit:返回結果的個數(shù),默認返回全部結果
>>> a = soup.find_all('a') #查找所有的標簽a
>>> len(a)   #本頁標簽<a>的數(shù)量
54
>>> soup.find_all('script') #查找所有標簽script
[<script>(function(){var hashMatch=document.location...(省略)
>>> soup.find_all('script',{'src':"https://pss.bdstatic.com/static/
superman/js/components/hotsearch-5af0f864cf.js"}) #篩選,只查找src=字符串的標簽
[<script src="https://pss.bdstatic.com/static/superman/js/
components/hotsearch-5af0f864cf.js"></script>]'百度一下,你就知道'
>>> import re #使用正則表達式庫,可用這個庫實現(xiàn)字符串片段匹配
>>> soup.find_all('script',{'src':re.compile('jquery')})
[<script src="https://pss.bdstatic.com/static/superman/js/lib/
jquery-1-edb203c114.10.2.js" type="text/javascript"></script>]
>>> soup.find_all(string=re.compile('百度')) #檢索string屬性的內容
['百度一下,你就知道', '百度首頁', '查看全部百度產品 >', 
'關于百度', '使用百度前必讀', '百度APP掃碼登錄', '百度一下\xa0生活更好']

簡單說,BeautifulSoup 的find_all()方法可以根據標簽名字、標簽屬性和內容檢索并返回標簽列表,通過片段字符串檢索時需要使用正則表達式re 函數(shù)庫,re 是Python 標準庫,直接通過import re 即可使用。

采用re.compile('jquery')實現(xiàn)對片段字符串(如'jquery')的檢索。當對標簽屬性檢索時,屬性和對應的值采用JSON格式,例如:

'src':re.compile('jquery')

其中,鍵值對中值的部分可以是字符串或者正則表達式。

find()屬性

除了find_all()方法,BeautifulSoup 類還提供一個find()方法,它們的區(qū)別只是前者返回全部結果而后者返回找到的第一個結果,find_all()函數(shù)由于可能返回更多結果,所以采用列表形式;find()函數(shù)返回字符串形式。

屬性描述
BeautifulSoup.find(name, attrs, recursive, string)根據參數(shù)找到對應標簽,返回找到的第一個值,字符串。
name: 按照Tag標簽名字檢索,名字用字符串形式表示,例如:dvi, li;
attrs: 按照Tag標簽屬性值檢索,需要列出屬性名稱和值,采用JSON表示;
recursive: 設置查找層次,只查找當前標簽下一層時使用recursive=False
string:按照關鍵字檢索string屬性內容,采用string=開始;

以下是爬蟲的示例:

http://t.csdnimg.cn/ywftG

http://www.risenshineclean.com/news/2676.html

相關文章:

  • 泉州市住房和城鄉(xiāng)建設部網站南寧網站優(yōu)化公司電話
  • 自制游戲軟件seo怎樣
  • 網站做維恩圖公司網站制作教程
  • 合肥軟件外包公司關鍵詞優(yōu)化排名查詢
  • 南寧微信網站制作周口網絡推廣哪家好
  • 做網站優(yōu)化要多少錢廣州網絡seo優(yōu)化
  • 網站名字大全有哪些鄭州網站優(yōu)化外包
  • 網站建設微信商城多少錢病毒式營銷案例
  • wordpress摘要添加省略號鄂州網站seo
  • 網站的收費標準品牌運營策劃
  • 建設網站怎么掙錢廣東網約車漲價
  • 山東自助seo建站商丘seo外包
  • 卡地亞手表官方網站查詢上海seo優(yōu)化服務公司
  • 展示型企業(yè)網站有哪些推廣普通話黑板報
  • 外包做網站要十幾萬泉州排名推廣
  • 為什么做網站推廣站長域名查詢工具
  • 北京網站手機站建設公司電話號碼上海牛巨微seo
  • 開源網站建設網站alexa排名
  • 阿里云網站怎么備案域名網絡營銷戰(zhàn)略
  • 個人網站建設網站一個完整的營銷策劃方案范文
  • 網站開發(fā)與維護的內容百度seo搜索引擎優(yōu)化
  • 網站線框圖怎樣做萬網官網
  • 常州制作網站信息百度指數(shù)搜索指數(shù)的數(shù)據來源
  • 網站備案與不備案的區(qū)別北京seo平臺
  • 防止入侵網站百度400電話
  • 現(xiàn)在建一個網站一年費用只要幾百元網絡推廣平臺哪家公司最好
  • wordpress換電腦網站排名優(yōu)化教程
  • 做門戶網站的框架360地圖怎么添加商戶
  • 做游戲破解版的網站百度搜索關鍵詞排名優(yōu)化
  • 法人一證通主副證書管理新流程建站優(yōu)化推廣