位置: IT常識(shí) - 正文
推薦整理分享Python 萬(wàn)能代碼模版:爬蟲代碼篇(萬(wàn)能的python),希望有所幫助,僅作參考,歡迎閱讀內(nèi)容。
文章相關(guān)熱門搜索詞:python萬(wàn)能代碼,python代碼大全,有用的python代碼,python代碼大全和用法,python代碼大全和用法,萬(wàn)能的python,python萬(wàn)能代碼,python萬(wàn)能代碼生成器,內(nèi)容如對(duì)您有幫助,希望把文章鏈接給更多的朋友!
你好,我是悅創(chuàng)。
很多同學(xué)一聽到 Python 或編程語(yǔ)言,可能條件反射就會(huì)覺得“很難”。但今天的 Python 課程是個(gè)例外,因?yàn)榻裉熘v的 **Python 技能,不需要你懂計(jì)算機(jī)原理,也不需要你理解復(fù)雜的編程模式。**即使是非開發(fā)人員,只要替換鏈接、文件,就可以輕松完成。
并且這些幾個(gè)實(shí)用技巧,簡(jiǎn)直是 Python 日常幫手的最佳實(shí)踐。比如:
爬取文檔,爬表格,爬學(xué)習(xí)資料;玩轉(zhuǎn)圖表,生成數(shù)據(jù)可視化;批量命名文件,實(shí)現(xiàn)自動(dòng)化辦公;批量搞圖,加水印、調(diào)尺寸。接下來(lái),我們就逐一用 Python 實(shí)現(xiàn),其中我提供的代碼是萬(wàn)能代碼,只用替換成你想爬的網(wǎng)頁(yè)鏈接、文件位置、照片就可以進(jìn)行處理了。
如果你沒有安裝 Python 及相關(guān)環(huán)境搭建,你可以參考我之前寫的文章:
數(shù)據(jù)分析的環(huán)境不會(huì)搭?看這里準(zhǔn)沒錯(cuò)!Python3 網(wǎng)絡(luò)爬蟲系統(tǒng)一對(duì)一教學(xué)(環(huán)境安裝)**Tips:**因?yàn)椴煌恼鹿?jié)的數(shù)據(jù)可能會(huì)交叉引用,所以建議你首先在桌面建立一個(gè)工作夾,然后每個(gè)章節(jié)都單獨(dú)建立一個(gè) Python 文件進(jìn)行實(shí)驗(yàn)。比如可以新建一個(gè) pytips 的目錄,然后在該目錄下,每個(gè)章節(jié)創(chuàng)建一個(gè) tips 文件夾,里面創(chuàng)建對(duì)應(yīng)的 .py 文件。(按你具體的來(lái),我的文件夾也和這個(gè)不一樣)
1. 巧用 Python 爬蟲,實(shí)現(xiàn)財(cái)富自由首先可以用 Python 來(lái)進(jìn)行爬蟲,什么是爬蟲?簡(jiǎn)單理解來(lái)說(shuō)就是抓取網(wǎng)絡(luò)上的數(shù)據(jù)(文檔、資料、圖片等)。比如你考研可以爬文檔和學(xué)習(xí)資料,要網(wǎng)絡(luò)上的表格數(shù)據(jù)做分析,批量下載圖片等。
下面我們來(lái)看看如何一一實(shí)現(xiàn)。
1.1 爬取文檔、學(xué)習(xí)資料首先,你得先確定你要爬的網(wǎng)站是什么?你要獲取的目的是什么?比如,小悅想爬青巖幫網(wǎng)站中的報(bào)考指南,所以他想搜集目前該網(wǎng)頁(yè)的所有文章的標(biāo)題和超鏈接,以方便后續(xù)瀏覽。
爬取網(wǎng)站的鏈接:https://zkaoy.com/sions/exam 目的:收集目前該網(wǎng)頁(yè)的所有文章的標(biāo)題和超鏈接
那使用 Python,可以參考以下兩步的代碼模板實(shí)現(xiàn)(提示:需要先安裝 Python 依賴:urllib3 bs4)。 安裝所需要的庫(kù):
pip install urllib3 BeautifulSoup4第一步,下載該網(wǎng)頁(yè)并保存為文件,代碼如下。 **PS:**這里,我為了清晰一些,拆成兩個(gè)代碼文件,后面我再來(lái)一個(gè)合并成一個(gè)代碼文件。
# urllib3 的方法# file_name:Crawler_urllib3.pyimport urllib3def download_content(url): """ 第一個(gè)函數(shù),用來(lái)下載網(wǎng)頁(yè),返回網(wǎng)頁(yè)內(nèi)容 參數(shù) url 代表所要下載的網(wǎng)頁(yè)網(wǎng)址。 整體代碼和之前類似 """ http = urllib3.PoolManager() response = http.request("GET", url) response_data = response.data html_content = response_data.decode() return html_content# 第二個(gè)函數(shù),將字符串內(nèi)容保存到文件中# 第一個(gè)參數(shù)為所要保存的文件名,第二個(gè)參數(shù)為要保存的字符串內(nèi)容的變量def save_to_file(filename, content): fo = open(filename, "w", encoding="utf-8") fo.write(content) fo.close()def main(): # 下載報(bào)考指南的網(wǎng)頁(yè) url = "https://zkaoy.com/sions/exam" result = download_content(url) save_to_file("tips1.html", result)if __name__ == '__main__': main()# requests 代碼# file_name:Crawler_requests.pyimport requestsdef download_content(url): """ 第一個(gè)函數(shù),用來(lái)下載網(wǎng)頁(yè),返回網(wǎng)頁(yè)內(nèi)容 參數(shù) url 代表所要下載的網(wǎng)頁(yè)網(wǎng)址。 整體代碼和之前類似 """ response = requests.get(url).text return response# 第二個(gè)函數(shù),將字符串內(nèi)容保存到文件中# 第一個(gè)參數(shù)為所要保存的文件名,第二個(gè)參數(shù)為要保存的字符串內(nèi)容的變量def save_to_file(filename, content): with open(filename, mode="w", encoding="utf-8") as f: f.write(content)def main(): # 下載報(bào)考指南的網(wǎng)頁(yè) url = "https://zkaoy.com/sions/exam" result = download_content(url) save_to_file("tips1.html", result)if __name__ == '__main__': main()第二步,解析網(wǎng)頁(yè),并提取出文章的鏈接和標(biāo)題。
# file_name:html_parse.py# 解析方法一from bs4 import BeautifulSoup# 輸入?yún)?shù)為要分析的 html 文件名,返回值為對(duì)應(yīng)的 BeautifulSoup 對(duì)象def create_doc_from_filename(filename):with open(filename, "r", encoding='utf-8') as f:html_content = f.read()doc = BeautifulSoup(html_content)return docdef parse(doc):post_list = doc.find_all("div", class_="post-info")for post in post_list:link = post.find_all("a")[1]print(link.text.strip())print(link["href"])def main():filename = "tips1.html"doc = create_doc_from_filename(filename)parse(doc)if __name__ == '__main__':main()# file_name:html_parse_lxml.py# 解析方法二,指定解析器from bs4 import BeautifulSoup# 輸入?yún)?shù)為要分析的 html 文件名,返回值為對(duì)應(yīng)的 BeautifulSoup 對(duì)象def create_doc_from_filename(filename):with open(filename, "r", encoding='utf-8') as f:html_content = f.read()soup = BeautifulSoup(html_content, "lxml")return soupdef parse(soup):post_list = soup.find_all("div", class_="post-info")for post in post_list:link = post.find_all("a")[1]print(link.text.strip())print(link["href"])def main():filename = "tips1.html"soup = create_doc_from_filename(filename)parse(soup)if __name__ == '__main__':main()**PS:**兩個(gè)代碼很像,只是差別在指定了解析器——lxml
執(zhí)行代碼之后,你就可以看到網(wǎng)頁(yè)中的標(biāo)題和鏈接已經(jīng)被打印到了屏幕上。
敲黑板!這些省份往屆生不能預(yù)報(bào)名!https://zkaoy.com/15123.html二戰(zhàn)必須回戶籍所在地考嗎?https://zkaoy.com/15103.html這些同學(xué)不能參加預(yù)報(bào)名!不注意,有可能考研報(bào)名失敗!https://zkaoy.com/15093.html嗚呼~考研報(bào)名費(fèi),這種情況可以退款!https://zkaoy.com/15035.html注意:又發(fā)通知!22研招有4點(diǎn)變化??https://zkaoy.com/14977.html2021考研初試時(shí)間定了!正式網(wǎng)報(bào)時(shí)間有變化https://zkaoy.com/14915.html快碼住!考研前的這些關(guān)鍵時(shí)間點(diǎn),千萬(wàn)不能錯(cuò)過!https://zkaoy.com/14841.html近萬(wàn)名考生考研報(bào)名失敗!問題出在這!22考研一定注意!https://zkaoy.com/14822.html往屆生比應(yīng)屆生更容易上岸,你認(rèn)同嗎?https://zkaoy.com/14670.html各省市考研報(bào)名費(fèi)用!https://zkaoy.com/14643.html要開始報(bào)名了?現(xiàn)在不需要擔(dān)心,沒你想的那么復(fù)雜……h(huán)ttps://zkaoy.com/14620.html教育部公布重要數(shù)據(jù):研究生擴(kuò)招20.74%!https://zkaoy.com/14593.html虛假招生?這一高校臨近開學(xué)取消獎(jiǎng)學(xué)金!https://zkaoy.com/14494.html下個(gè)月要預(yù)報(bào)名了,高頻問題早知道https://zkaoy.com/14399.html注意!這些網(wǎng)報(bào)信息要準(zhǔn)備好,否則影響9月考研報(bào)名!https://zkaoy.com/14352.html想考上研,各科應(yīng)該考多少分?https://zkaoy.com/14273.html選擇報(bào)考點(diǎn)需要注意什么?報(bào)考點(diǎn)有限制!https://zkaoy.com/14161.html各地考研報(bào)名費(fèi)匯總!快來(lái)看看你要交多少錢!https://zkaoy.com/14158.html考研高校推免人數(shù)公布,統(tǒng)考名額還剩多少?https://zkaoy.com/14092.html這幾所高校考研參考書有變!參考書目要怎么搜集?https://zkaoy.com/14061.html院校指南https://zkaoy.com/sions/zxgg1這些要提前準(zhǔn)備好!不然影響報(bào)名!https://zkaoy.com/13958.html救命!近萬(wàn)人因?yàn)檫@個(gè),錯(cuò)失考研機(jī)會(huì)!https://zkaoy.com/13925.html考研如何看招生簡(jiǎn)章和招生目錄?https://zkaoy.com/13924.html上面,我是拆開了,現(xiàn)在合并成一個(gè)代碼文件即可:
# file_name:Crawler.pyimport requestsfrom bs4 import BeautifulSoupdef download_content(url): """ 第一個(gè)函數(shù),用來(lái)下載網(wǎng)頁(yè),返回網(wǎng)頁(yè)內(nèi)容 參數(shù) url 代表所要下載的網(wǎng)頁(yè)網(wǎng)址。 整體代碼和之前類似 """ response = requests.get(url).text return response# 第二個(gè)函數(shù),將字符串內(nèi)容保存到文件中# 第一個(gè)參數(shù)為所要保存的文件名,第二個(gè)參數(shù)為要保存的字符串內(nèi)容的變量def save_to_file(filename, content): with open(filename, mode="w", encoding="utf-8") as f: f.write(content)def create_doc_from_filename(filename): # 輸入?yún)?shù)為要分析的 html 文件名,返回值為對(duì)應(yīng)的 BeautifulSoup 對(duì)象 with open(filename, "r", encoding='utf-8') as f: html_content = f.read() soup = BeautifulSoup(html_content, "lxml") return soupdef parse(soup): post_list = soup.find_all("div", class_="post-info") for post in post_list: link = post.find_all("a")[1] print(link.text.strip()) print(link["href"])def main(): # 下載報(bào)考指南的網(wǎng)頁(yè) url = "https://zkaoy.com/sions/exam" filename = "tips1.html" result = download_content(url) save_to_file(filename, result) soup = create_doc_from_filename(filename) parse(soup)if __name__ == '__main__': main()代碼文件:[https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python 萬(wàn)能代碼模版:10 大必學(xué)實(shí)用技巧/1.1 巧用 Python 爬蟲,實(shí)現(xiàn)財(cái)富自由](https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python 萬(wàn)能代碼模版:10 大必學(xué)實(shí)用技巧/1.1 巧用 Python 爬蟲,實(shí)現(xiàn)財(cái)富自由)
那如果你想爬取其他網(wǎng)頁(yè)如何替換呢?你只需替換幾處即可,如下圖所示。
替換為想要下載的網(wǎng)頁(yè)地址替換為網(wǎng)頁(yè)保存的文件名是 BeautifulSoup 函數(shù),我們用它一步步從 html 的結(jié)構(gòu)中解析出我們想要的內(nèi)容,這里我們實(shí)現(xiàn)的是首先找到所有 class 屬性是 post-info 的 div 標(biāo)簽,然后將這些標(biāo)簽中的 a 標(biāo)簽的文本部分提取出來(lái)。如果你解析的網(wǎng)頁(yè)結(jié)構(gòu)和這個(gè)不同,具體 BeautifulSoup 的用法可以參考我們這節(jié)課程 https://www.aiyc.top/673.html#六、Requests_與_BeautifulSoup_庫(kù)的基礎(chǔ)操作。1.2 抓取表格,做數(shù)據(jù)分析我們?nèi)粘T谏暇W(wǎng)的時(shí)候,往往都會(huì)看到一些有用的表格,都希望保存下來(lái)日后使用,但直接復(fù)制到 Excel 往往都很容易發(fā)生變形,或者亂碼,或者格式錯(cuò)亂等種種問題,借助 Python 可以輕松實(shí)現(xiàn)網(wǎng)頁(yè)中表格的保存。(提示:需要先安裝依賴: urllib3, pandas)
pip install urllib3 pandas以招行外匯頁(yè)面為例: Python 代碼如下:
# file_name: excel_crawler_urllib3.pyimport urllib3import pandas as pddef download_content(url):# 創(chuàng)建一個(gè) PoolManager 對(duì)象,命名為 httphttp = urllib3.PoolManager()# 調(diào)用 http 對(duì)象的 request 方法,第一個(gè)參數(shù)傳一個(gè)字符串 "GET"# 第二個(gè)參數(shù)則是要下載的網(wǎng)址,也就是我們的 url 變量# request 方法會(huì)返回一個(gè) HTTPResponse 類的對(duì)象,我們命名為 responseresponse = http.request("GET", url)# 獲取 response 對(duì)象的 data 屬性,存儲(chǔ)在變量 response_data 中response_data = response.data# 調(diào)用 response_data 對(duì)象的 decode 方法,獲得網(wǎng)頁(yè)的內(nèi)容,存儲(chǔ)在 html_content# 變量中html_content = response_data.decode()return html_contentdef save_excel():html_content = download_content("http://fx.cmbchina.com/Hq/")# 調(diào)用 read_html 函數(shù),傳入網(wǎng)頁(yè)的內(nèi)容,并將結(jié)果存儲(chǔ)在 cmb_table_list 中# read_html 函數(shù)返回的是一個(gè) DataFrame 的listcmb_table_list = pd.read_html(html_content)# 通過打印每個(gè) list 元素,確認(rèn)我們所需要的是第二個(gè),也就是下標(biāo) 1cmb_table_list[1].to_excel("tips2.xlsx")def main():save_excel()if __name__ == '__main__':main()# file_name: excel_crawler_requests.pyimport requestsimport pandas as pdfrom requests.exceptions import RequestExceptiondef download_content(url):try:response = requests.get(url)if response.status_code == 200:return response.textelse:return "None"except RequestException as e:return edef save_excel(filename):html_content = download_content("http://fx.cmbchina.com/Hq/")# 調(diào)用 read_html 函數(shù),傳入網(wǎng)頁(yè)的內(nèi)容,并將結(jié)果存儲(chǔ)在 cmb_table_list 中# read_html 函數(shù)返回的是一個(gè) DataFrame 的listcmb_table_list = pd.read_html(html_content)# 通過打印每個(gè) list 元素,確認(rèn)我們所需要的是第二個(gè),也就是下標(biāo) 1# print(cmb_table_list)cmb_table_list[1].to_excel(filename)def main():filename = "tips2.xlsx"save_excel(filename)if __name__ == '__main__':main()下圖為了輔助理解: 執(zhí)行之后,會(huì)在代碼文件所在的目錄生成 tips2.xlsx 的 excel 文件,打開之后如下圖所示。 當(dāng)你希望抓取自己的表格時(shí),替換下面 3 個(gè)部分即可。
修改你要保存的 excel 文件名稱;替換為想要抓取表格所在網(wǎng)頁(yè)的網(wǎng)址;替換為表格的序號(hào),比如想要抓取網(wǎng)頁(yè)中的第幾個(gè)表格;代碼鏈接:https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python%20萬(wàn)能代碼模版:10%20大必學(xué)實(shí)用技巧/1.2%20抓取表格,做數(shù)據(jù)分析
1.3 批量下載圖片當(dāng)我們看到一個(gè)網(wǎng)頁(yè)上有很多喜歡的圖片時(shí),一張一張保存效率比較低。
通過 Python 我們也可以實(shí)現(xiàn)快速的圖片下載。以堆糖網(wǎng)為例,我們看到了這個(gè)網(wǎng)頁(yè)。 感覺很好看,希望能夠把所有圖片下載下來(lái),方案大體和 1 是一樣的。
我們首先下載網(wǎng)頁(yè),然后分析其中的 img 標(biāo)簽,然后把圖片下載下載來(lái)。首先我們?cè)诠ぷ髂夸浗⒁粋€(gè)文件夾 tips_3 用來(lái)放下載的圖片。
首先還是下載網(wǎng)頁(yè),Python 代碼如下。
# -*- coding: utf-8 -*-# @Author: # @Date: 2021-09-13 20:16:07# @Last Modified by: aiyc# @Last Modified time: 2021-09-13 21:02:58import urllib3# 第一個(gè)函數(shù),用來(lái)下載網(wǎng)頁(yè),返回網(wǎng)頁(yè)內(nèi)容# 參數(shù) url 代表所要下載的網(wǎng)頁(yè)網(wǎng)址。# 整體代碼和之前類似def download_content(url):http = urllib3.PoolManager()response = http.request("GET", url)response_data = response.datahtml_content = response_data.decode()return html_content# 第二個(gè)函數(shù),將字符串內(nèi)容保存到文件中# 第一個(gè)參數(shù)為所要保存的文件名,第二個(gè)參數(shù)為要保存的字符串內(nèi)容的變量def save_to_file(filename, content):fo = open(filename, "w", encoding="utf-8")fo.write(content)fo.close()url = "https://www.duitang.com/search/?kw=&type=feed"result = download_content(url)save_to_file("tips3.html", result)然后是抽取 img 標(biāo)簽,下載圖片。
from bs4 import BeautifulSoupfrom urllib.request import urlretrieve# 輸入?yún)?shù)為要分析的 html 文件名,返回值為對(duì)應(yīng)的 BeautifulSoup 對(duì)象def create_doc_from_filename(filename):fo = open(filename, "r", encoding='utf-8')html_content = fo.read()fo.close()doc = BeautifulSoup(html_content, "lxml")return docdoc = create_doc_from_filename("tips3.html")images = doc.find_all("img")for i in images:src = i["src"]filename = src.split("/")[-1]# print(i["src"])urlretrieve(src, "tips_3/" + filename)執(zhí)行完畢后打開 tips_3目錄,可以看到圖片都被下載下來(lái)了。 替換說(shuō)明如下。
替換為想要保存的文件名(網(wǎng)頁(yè)文件);替換為想要下載網(wǎng)頁(yè)的網(wǎng)址;替換為想要保存圖片的文件夾,需要?jiǎng)?chuàng)建好文件夾。另外,有的網(wǎng)站的圖片是先顯示網(wǎng)頁(yè)之后才動(dòng)態(tài)加載的,這類動(dòng)態(tài)加載的內(nèi)容的圖片下載是不支持的喔。 代碼鏈接:https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python%20萬(wàn)能代碼模版:10%20大必學(xué)實(shí)用技巧/1.3%20批量下載圖片
·推出輔導(dǎo)班啦,包括「Python 語(yǔ)言輔導(dǎo)班、C++輔導(dǎo)班、算法/數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)班、少兒編程、pygame 游戲開發(fā)」,全部都是一對(duì)一教學(xué):一對(duì)一輔導(dǎo) + 一對(duì)一答疑 + 布置作業(yè) + 項(xiàng)目實(shí)踐等。QQ、微信在線,隨時(shí)響應(yīng)!V:Jiabcdefh
先自我介紹一下,小編13年上師交大畢業(yè),曾經(jīng)在小公司待過,去過華為OPPO等大廠,18年進(jìn)入阿里,直到現(xiàn)在。深知大多數(shù)初中級(jí)java工程師,想要升技能,往往是需要自己摸索成長(zhǎng)或是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則近萬(wàn)元的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效率很低又漫長(zhǎng),而且容易碰到天花板技術(shù)停止不前。因此我收集了一份《java開發(fā)全套學(xué)習(xí)資料》送給大家,初衷也很簡(jiǎn)單,就是希望幫助到想自學(xué)又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。添加下方名片,即可獲取全套學(xué)習(xí)資料哦
上一篇:【OpenCV】 Canny邊緣檢測(cè) | 圖像輪廓檢測(cè) | 直方圖均衡化(opencv 邊緣檢測(cè))
下一篇:SM1、SM2、SM3、SM4、同態(tài)加密、密態(tài)計(jì)算、隱私計(jì)算和安全多方計(jì)算的概念
網(wǎng)站地圖: 企業(yè)信息 工商信息 財(cái)稅知識(shí) 網(wǎng)絡(luò)常識(shí) 編程技術(shù)
友情鏈接: 武漢網(wǎng)站建設(shè)