欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:爬蟲:靜態(tài)網(wǎng)頁的爬取

柚子快報邀請碼778899分享:爬蟲:靜態(tài)網(wǎng)頁的爬取

http://yzkb.51969.com/

一、引言

1、靜態(tài)網(wǎng)頁

首先我們來了解一下什么是靜態(tài)網(wǎng)頁,有一種說法是這樣的:

靜態(tài)網(wǎng)頁是標(biāo)準(zhǔn)的HTML文件,它的文件擴(kuò)展名是.htm、.html,可以包含文本、圖像、聲音、FLASH動畫、客戶端腳本和ActiveX控件及JAVA小程序等。靜態(tài)網(wǎng)頁是相對于動態(tài)網(wǎng)頁而言,是指沒有后臺數(shù)據(jù)庫、不含程序和不可交互的網(wǎng)頁。

2、爬蟲

網(wǎng)絡(luò)爬蟲又稱網(wǎng)絡(luò)蜘蛛和網(wǎng)絡(luò)機(jī)器人,也是一種程序或腳本、它可以自動請求萬維網(wǎng)網(wǎng)站并提取網(wǎng)絡(luò)數(shù)據(jù),但需要遵守一定的規(guī)則。

今天用Python中的爬蟲來爬取一個靜態(tài)網(wǎng)頁,其實爬蟲并非Python獨有,其他語言也可以寫爬蟲,比如Java,PHP等等,但Python相對來說比較簡單一些

3.robots協(xié)議

Robots協(xié)議(也稱為爬蟲協(xié)議、機(jī)器人協(xié)議等)的全稱是“網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)”(Robots Exclusion Protocol),它的作用很簡單,就是告訴爬蟲,在這個網(wǎng)頁什么內(nèi)容你可以爬取,什么東西你不應(yīng)該去爬取,市面上主流搜索引擎都會遵守Robots協(xié)議,因為搜索引擎本質(zhì)是也可以說是爬蟲。

二、requests

1、requests的簡介

今天使用一個簡便的爬蟲庫:requests,先來簡單認(rèn)識一下它,?requests?庫是一個原生的?HTTP?庫,比起其他一些庫更為容易使用。 它可以發(fā)送原生的?HTTP 1.1?請求,讓使用者不用手動為?URL?添加查詢串, 也不需要對 POST?數(shù)據(jù)進(jìn)行表單編碼

2、實踐

先上代碼

以中國氣象局天氣預(yù)報為例子

#導(dǎo)入模塊

import requests

#該模塊作用是使打印出來的json格式化

import pprint

#請求的URL路徑

url = "https://weather.cma.cn/api/now/59287"

#發(fā)送一個請求

requests = requests.get(url)

#進(jìn)行編碼,主要作用是防止亂碼

requests.encoding='utf-8'

#該變量作用是將數(shù)據(jù)儲存起來

re_data = requests.json()

#讓打印出來的json格式化

pprint.pprint(re_data)

print("城市:" + re_data['data']['location']['name'])

print("風(fēng)向:" + re_data['data']['now']['windDirection'])

這里用和城市和風(fēng)向做例子,將有效信息從一堆字符串里提取出來,結(jié)果如下:

雖然代碼看起來簡單,但是我這種做法能爬取到的信息少之又少,不過這只是對requests庫的淺嘗輒止,畢竟都用到爬蟲了,這點信息自然是不夠的。但俗話說:“工欲善其事,必先利其器”,先來認(rèn)識一下新的庫。

三.BeautifulSoup

1、簡介

還是簡單介紹一下BeautifulSoup,BeautifulSoup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫。這個庫能夠通過你喜歡的轉(zhuǎn)換器實現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式。它是一個解析器,可以特定的解析出內(nèi)容,省去了我們編寫正則表達(dá)式的麻煩。同時,Beautiful Soup支持多種格式和語法,可以通過不同的解析器快速解析和查找網(wǎng)頁文檔.。

四、正則表達(dá)式

先粗略認(rèn)識一下:

正則表達(dá)式是一種用于匹配字符串中特定模式的強(qiáng)大工具。它可以用來檢查一個字符串是否符合某種特定的格式,例如電子郵件地址、電話號碼、網(wǎng)址等。正則表達(dá)式由一系列字符組成,這些字符可以表示特定的字符、元字符和操作符。

元字符是正則表達(dá)式中具有特殊含義的字符,例如:

.?匹配任意單個字符(除了換行符)*?匹配前面的字符零次或多次+?匹配前面的字符一次或多次??匹配前面的字符零次或一次[ ]?匹配方括號內(nèi)的任意一個字符{n}?匹配前面的字符恰好n次^?匹配字符串的開頭$?匹配字符串的結(jié)尾\?轉(zhuǎn)義特殊字符

1、(三+四)實踐

接下來我們試著將整個靜態(tài)網(wǎng)頁的HTML代碼全提取出來,先把代碼放上來:

import requests

from bs4 import BeautifulSoup

url = 'https://weather.cma.cn/web/weather/map.html' # 需要爬取的網(wǎng)頁URL

response = requests.get(url)

html_content = response.text

soup = BeautifulSoup(html_content, 'html.parser')

print(soup.prettify())

依舊還是中國氣象局天氣預(yù)報這個網(wǎng)站,如下圖所示,我們提取了一整個網(wǎng)頁的HTML代碼:

(篇幅原因,只能展示部分)

可以看到一整頁的代碼很多,我們可以按照一定規(guī)則提取有有的信息:

import requests

from bs4 import BeautifulSoup # 網(wǎng)頁解析,獲取數(shù)據(jù)

import re # 正則表達(dá)式,進(jìn)行文字匹配

findLink = re.compile(r'(.*?)

url = 'https://weather.cma.cn/web/text/HN/AGD.html' # 需要爬取的網(wǎng)頁URL

response = requests.get(url)

html = response.text

soup = BeautifulSoup(html, 'html.parser')#解析數(shù)據(jù)

#輸出原來整個網(wǎng)頁的HTML源碼,測試是否爬取成功

#print(soup.prettify())

for item in soup.find_all('tr', class_="odd"): # 查找符合要求的字符串

item = str(item)#將獲取到的item變成字符串

link = re.findall(findLink, item) # 通過正則表達(dá)式查找

print(link)

通過一定的規(guī)則(正則表達(dá)式)將數(shù)據(jù)進(jìn)行處理后,得到的數(shù)據(jù)價值提升了許多,如下圖: (篇幅原因,只能展示部分)

這一張?zhí)幚磉^后的數(shù)據(jù),看起來不止比整個HTML頁面舒服多了,就數(shù)據(jù)方面的提升也是一眼就可以看出來,但可以看見,第一個數(shù)據(jù)和最后一個數(shù)據(jù)有還是有標(biāo)頭,而且還有重復(fù)的部分,所以我們接下來要進(jìn)行數(shù)據(jù)再處理,最后將數(shù)據(jù)存表。

五.數(shù)據(jù)存表

1、真·完整代碼:

import requests

from bs4 import BeautifulSoup # 網(wǎng)頁解析,獲取數(shù)據(jù)

import re # 正則表達(dá)式,進(jìn)行文字匹配

#將數(shù)據(jù)存進(jìn)xlsx表

from openpyxl import Workbook

excel = Workbook()

work = excel.active

#列表第一行

work.append(['城市','白日天氣現(xiàn)象','白日風(fēng)向','白日風(fēng)力','當(dāng)天最高溫度','夜晚天氣現(xiàn)象','夜晚風(fēng)向','夜晚風(fēng)力','當(dāng)天最低溫度'])

# 正則表達(dá)式

findLink = re.compile(r'(.*?)

findTitle = re.compile(r'(.*?)

head={

"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"

}

url = 'https://weather.cma.cn/web/text/HN/AGD.html' # 需要爬取的網(wǎng)頁URL

response = requests.get(url)

html = response.text

soup = BeautifulSoup(html, 'html.parser') # 解析數(shù)據(jù)

# 輸出原來整個網(wǎng)頁的HTML源碼,測試是否爬取成功

#print(soup.prettify())

for item in soup.find_all('tr', class_="odd"): # 查找符合要求的字符串

item = str(item) # 將獲取到的item變成字符串

titles = re.findall(findTitle, item) # 通過正則表達(dá)式查找

link = re.findall(findLink,item)[0]

#對獲取的數(shù)據(jù)進(jìn)一步處理

pattern = r'(.*?)<\/a>'

# 使用re.findall來查找所有匹配的項

matches = re.findall(pattern, link)

#字符串相加

s = matches+titles[1:-1]

#存表

work.append(s)

excel.save("天氣預(yù)報.xlsx")

print(matches,titles[1:-1])

結(jié)果:

在上面這張圖我們可以看見,我將城市的名字從標(biāo)頭

#對獲取的數(shù)據(jù)進(jìn)一步處理

pattern = r'(.*?)<\/a>'

# 使用re.findall來查找所有匹配的項

matches = re.findall(pattern, link)

#字符串相加

s = matches+titles[1:-1]

因為得出來的結(jié)果為兩個字符串,所以將他們相加在一起,方便下面存表。

2、表數(shù)據(jù)

代碼執(zhí)行完畢之后,在pycharm的左上角,項目的位置上會出現(xiàn)一個xlsx文件:

文件內(nèi)容如下:

六、結(jié)語

本文使用了與爬蟲有關(guān)三個庫來爬取一篇靜態(tài)網(wǎng)頁,也初步展示了怎么處理拿到手的數(shù)據(jù),使其變得更加美觀,更具價值,還有怎么將數(shù)據(jù)存進(jìn)xlsx表中。想要獲取高質(zhì)量的網(wǎng)頁數(shù)據(jù),可以在開始爬取數(shù)據(jù)前,通過選擇合適的爬蟲框架、建設(shè)爬取的流程等,都可以提高爬蟲程序的效率和準(zhǔn)確性。

此外,爬蟲還具有數(shù)據(jù)清洗和處理的能力,它能去除噪聲數(shù)據(jù)、過濾無用信息,并將數(shù)據(jù)轉(zhuǎn)換為可用的格式,為后續(xù)的分析和應(yīng)用做好準(zhǔn)備。

最后,爬蟲可以整合和分析數(shù)據(jù),這對于大規(guī)模數(shù)據(jù)的分析和研究至關(guān)重要。

好了,到此為止了。

柚子快報邀請碼778899分享:爬蟲:靜態(tài)網(wǎng)頁的爬取

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18720024.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄