不管你是待業(yè)還是失業(yè),在這個被互聯網圍繞的時代里,選擇python爬取教程,就多了一項技能,還怕找不到工作?,還怕不好找工作?小編就來告訴你這個專業(yè)的優(yōu)勢到底體現在哪里:Python 爬蟲工具,Python入門新人必看!手把手教你用 Python 爬取網頁,Python爬取某網站文檔數據完整教程(附源碼),Python爬蟲實戰(zhàn),完整的思路和步驟(附源碼)??。
前幾個月參加比賽我還自己寫了一個,不過python現在也有現成的模塊可以有,Google一下就可以了,寫一個也不難
寫在最前面這篇簡單的 Python 教程中,我們一共采取了下面幾個步驟,來爬取網頁內容:連接并獲取一個網頁的內容用 處理獲得的 html 數據在 soup 對象里循環(huán)搜索需要的 html 元素進行簡單的數據清理把數據寫入 csv 文件中大多數人作為數據科學家的*個任務,就是做網頁爬取。那時候,我對使用代碼從網站上獲取數據這項技術完全一無所知,它偏偏又是最有邏輯性并且最容易獲得的數據來源。在幾次嘗試之后,網頁爬取對我來說就幾乎是種本能行為了。如今,它更成為了我?guī)缀趺刻於家玫降纳贁祹讉€技術之一。在今天的文章中,我將會用幾個簡單的例子,向大家展示如何爬取一個網站——比如從Fast Track 上獲取2021年100強企業(yè)的信息。用腳本將獲取信息的過程自動化,不但能節(jié)省手動整理的時間,還能將所有企業(yè)數據整理在一個結構化的文件里,方便進一步分析查詢。太長不看版:如果你只是想要一個最基本的 Python 爬蟲程序的示例代碼,本文中所用到的全部代碼都放在 GitHub( Python 搞點什么的時候,你問的*個問題應該是:“我需要用到什么庫”?網頁爬取方面,有好幾個不同的庫可以用,包括:● Beautiful Soup● Requests● Scrapy● Selenium今天我們打算用 Beautiful Soup 庫。你只需要用 pip(Python包管理工具)就能很方便地將它裝到電腦上:檢查網頁為了明確要抓取網頁中的什么元素,你需要先檢查一下網頁的結構。以 Tech Track 100強企業(yè) ( HTML 元素內容既然數據都保存在表格里,那么只需要簡單的幾行代碼就能直接獲取到完整信息。如果你希望自己練習爬網頁內容,這就是一個挺不錯的范例。但請記住,實際情況往往不會這么簡單。這個例子里,所有的100個結果都包含在同一個頁面中,還被 <tr> 標簽分隔成行。但實際抓取過程中,許多數據往往分布在多個不同的頁面上,你需要調整每頁顯示的結果總數,或者遍歷所有的頁面,才能抓取到完整的數據。在表格頁面上,你可以看到一個包含了所有100條數據的表格,右鍵點擊它,選擇“檢查”,你就能很容易地看到這個 HTML 表格的結構。包含內容的表格本體是在這樣的標簽里:每一行都是在一個 <tr> 標簽里,也就是我們不需要太復雜的代碼,只需要一個循環(huán),就能讀取到所有的表格數據,并保存到文件里。附注:你還可以通過檢查當前頁面是否發(fā)送了 HTTP GET 請求,并獲取這個請求的返回值,來獲取顯示在頁面上的信息。因為 HTTP GET 請求經常能返回已經結構化的數據,比如 JSON 或者 XML 格式的數據,方便后續(xù)處理。你可以在開發(fā)者工具里點擊 Network 分類(有必要的話可以僅查看其中的 XHR 標簽的內容)。這時你可以刷新一下頁面,于是所有在頁面上載入的請求和返回的內容都會在 Network 中列出。此外,你還可以用某種 REST 客戶端(比如 Insomnia)來發(fā)起請求,并輸出返回值。刷新頁面后,Network標簽頁的內容更新了用 Beautiful Soup 庫處理網頁的 HTML 內容在熟悉了網頁的結構,了解了需要抓取的內容之后,我們終于要拿起代碼開工啦~首先要做的是導入代碼中需要用到的各種模塊。上面我們已經提到過 ,這個模塊可以幫我們處理 HTML 結構。接下來要導入的模塊還有 urllib,它負責連接到目標地址,并獲取網頁內容。*,我們需要能把數據寫入 CSV 文件,保存在本地硬盤上的功能,所以我們要導入 csv 庫。當然這不是*的選擇,如果你想要把數據保存成 json 文件,那相應的就需要導入 json 庫。下一步我們需要準備好需要爬取的目標網址。正如上面討論過的,這個網頁上已經包含了所有我們需要的內容,所以我們只需要把完整的網址復制下來,賦值給變量就行了:接下來,我們就可以用 urllib 連上這個URL,把內容保存在 page 變量里,然后用 來處理頁面,把處理結果存在 soup 變量里:這時候,你可以試著把 soup 變量打印出來,看看里面已經處理過的 html 數據長什么樣:如果變量內容是空的,或者返回了什么錯誤信息,則說明可能沒有正確獲取到網頁數據。你也許需要用一些錯誤捕獲代碼,配合 urllib.error 模塊,來發(fā)現可能存在的問題。查找 HTML 元素既然所有的內容都在表格里(<table>標簽),我們可以在 soup 對象里搜索需要的表格,然后再用 find_all 方法,遍歷表格中的每一行數據。如果你試著打印出所有的行,那應該會有 101 行——100行內容,加上一行表頭??纯创蛴〕鰜淼膬热荩绻麤]問題的話,我們就可以用一個循環(huán)來獲取所有數據啦。如果你打印出 soup 對象的前 2 行,你可以看到,每一行的結構是這樣的:可以看到,表格中總共有 8 列,分別是 Rank(排名)、Company(公司)、Location(地址)、Year End(財年結束)、Annual Sales Rise(年度銷售增長)、Latest Sales(本年度銷售額)、Staff(員工數)和 Comments(備注)。這些都是我們所需要的數據。這樣的結構在整個網頁中都保持一致(不過在其他網站上可能就沒這么簡單了!),所以我們可以再次使用 find_all 方法,通過搜索 <td> 元素,逐行提取出數據,存儲在變量中,方便之后寫入 csv 或 json 文件。循環(huán)遍歷所有的元素并存儲在變量中在 Python 里,如果要處理大量數據,還需要寫入文件,那列表對象是很有用的。我們可以先聲明一個空列表,填入最初的表頭(方便以后CSV文件使用),而之后的數據只需要調用列表對象的 append 方法即可。這樣就將打印出我們剛剛加到列表對象 rows 中的*行表頭。你可能會注意到,我輸入的表頭中比網頁上的表格多寫了幾個列名,比如 Webpage(網頁)和 (描述),請仔細看看上面打印出的 soup 變量數據——第二行第二列的數據里,可不只有公司名字,還有公司的網址和簡單描述。所以我們需要這些額外的列來存儲這些數據。下一步,我們遍歷所有100行數據,提取內容,并保存到列表中。循環(huán)讀取數據的方法:因為數據的*行是 html 表格的表頭,所以我們可以跳過不用讀取它。因為表頭用的是<th> 標簽,沒有用 <td> 標簽,所以我們只要簡單地查詢 <td> 標簽內的數據,并且拋棄空值即可。接著,我們將 data 的內容讀取出來,賦值到變量中:如上面的代碼所示,我們按順序將 8 個列里的內容,存儲到 8 個變量中。當然,有些數據的內容還需有額外的清理,去除多余的字符,導出所需的數據。數據清理如果我們打印出 company 變量的內容,就能發(fā)現,它不但包含了公司名稱,還包括和描述。如果我們打印出 sales 變量的內容,就能發(fā)現它還包括一些備注符號等需要清除的字符。我們希望把 company 變量的內容分割成公司名稱和描述兩部分。這用幾行代碼就能搞定。再看看對應的 html 代碼,你會發(fā)現這個單元格里還有一個 <span> 元素,這個元素里只有公司名稱。另外,還有一個 <a> 鏈接元素,包含一個指向該公司詳情頁面的鏈接。我們一會也會用到它!為了區(qū)分公司名稱和描述兩個字段,我們再用 find 方法把 <span> 元素里的內容讀取出來,然后刪掉或替換 company 變量中的對應內容,這樣變量里就只會留下描述了。要刪除 sales 變量中的多余字符,我們用一次 strip 方法即可。*我們要保存的是公司網站的鏈接。就像上面說的,第二列中有一個指向該公司詳情頁面的鏈接。每一個公司的詳情頁都有一個表格,大部分情況下,表格里都有一個公司網站的鏈接。檢查公司詳情頁里,表格中的鏈接為了抓取每個表格中的網址,并保存到變量里,我們需要執(zhí)行以下幾個步驟:在最初的 fast track 網頁上,找到需要訪問的公司詳情頁的鏈接。發(fā)起一個對公司詳情頁鏈接的請求用 處理一下獲得的 html 數據找到需要的鏈接元素正如上面的截圖那樣,看過幾個公司詳情頁之后,你就會發(fā)現,公司的網址基本上就在表格的*一行。所以我們可以在表格的*一行里找 <a> 元素。同樣,有可能出現*一行沒有鏈接的情況。所以我們增加了 try... except 語句,如果沒有發(fā)現網址,則將變量設置成 None。當我們把所有需要的數據都存在變量中的以后(還在循環(huán)體內部),我們可以把所有變量整合成一個列表,再把這個列表 append 到上面我們初始化的 rows 對象的末尾。上面代碼的*,我們在結束循環(huán)體之后打印了一下 rows 的內容,這樣你可以在把數據寫入文件前,再檢查一下。寫入外部文件*,我們把上面獲取的數據寫入外部文件,方便之后的分析處理。在 Python 里,我們只需要簡單的幾行代碼,就可以把列表對象保存成文件。*我們來運行一下這個 python 代碼,如果一切順利,你就會發(fā)現一個包含了 100 行數據的 csv 文件出現在了目錄中,你可以很容易地用 python 讀取和處理它??偨Y如果有什么沒說清楚的,歡迎大家在下面留言,我會盡可能給大家解答的!祝你的爬蟲之旅有一個美好的開始!整編-歐剃 來源- Parker)知乎機構號:來自硅谷的終身學習平臺——優(yōu)達學城( Google、Facebook、IBM 等行業(yè)大佬,從零開始掌握數據分析、機器學習、深度學習、人工智能、無人駕駛等前沿技術,激發(fā)未來無限可能!優(yōu)達學城 (Udacity) *官網 - 傳授硅谷的名企官方課程知乎專欄:優(yōu)達學習筆記,歡迎各位喜歡優(yōu)達的學習者們,在這里你可以分享所學,交流技術結識好友。歡迎各位積極投稿。優(yōu)達學習筆記
前言本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業(yè)用途,如有問題請及時聯系我們以作處理?;鹃_發(fā)環(huán)境Python 3.6Pycharm相關模塊的使用import os import requests import time import re import json from docx import Document from docx.shared import Cm安裝Python并添加到環(huán)境變量,pip安裝需要的相關模塊即可。目標網頁分析網站的文檔內容,都是以圖片形式存在的。它有自己的數據接口接口鏈接: download(): content = 0 for page in range(1, 96, 6): # 給定 2秒延時 time.sleep(2) # 獲取時間戳 now_time = int(time.time() * 1000) url = ' # 請求參數 params = { 'project_id': '1', 'aid': '272112230', 't': '', 'view_token': 'SqX7ktrZ_ZakjDI@vcohcCwbn_PLb3C1', 'page': f'{page}', '_': now_time, } # 請求頭 headers = { 'Host': 'openapi.book118.com', 'Referer': ' 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) /537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } response = requests.get(url=url, params=params, headers=headers) # 使用正則表達式提取內容 result = re.findall('((.*?))', response.text)[0] # 字符串轉json數據 json_data = json.loads(result)['data'] # 字典值的遍歷 for value in json_data.values(): content += 1 # 拼接圖片url img_url = 'http:' + value print(img_url) headers_1 = { 'Host': 'view-cache.book118.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) /537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } # 請求圖片url地址 獲取content二進制數據 img_content = requests.get(url=img_url, headers=headers_1).content # 文件名 img_name = str(content) + '.jpg' # 保存路徑 filename = 'img\' # 以二進制方式保存 (圖片、音頻、視頻等文件都是以二進制的方式保存) with open(filename + img_name, mode='wb') as f: f.write(img_content)注意點:1、一定要給延時,不然后面接口數據會請求不到。2、請求圖片url的時候headers參數需要寫完整,否則保存圖片是無法打開的3、命名*是給定數字,1.jpg、2.jpg 這樣,方便后續(xù)保存到word爬蟲部分的代碼還是比較簡單的,沒有什么特別的難度。爬取這些文檔,都是需要打印或者查詢所以要把這些單張的圖片都保存到word文檔里面。點擊加群找管理員即可免費獲取Python學習資料寫入文檔def save_picture(): document = Document() path = './img/' lis = os.listdir(path) c = [] for li in lis: index = li.replace('.jpg', '') c.append(index) c_1 = sorted(list(map(int, c))) print(c_1) new_files = [(str(i) + '.jpg') for i in c_1] for num in new_files: img_path = path + num document.add_picture(img_path, width=Cm(17), height=Cm(24)) document.save('tu.doc') # 保存文檔 os.remove(img_path) # 刪除保存在本地的圖片
前言小的時候心中總有十萬個為什么類似的問題,今天帶大家爬取一個問答類的網站。本堂課使用正則表達式對文本類的數據進行提取,正則表達式是數據提取的通用方法。環(huán)境介紹:python 3.爬蟲的一般思路1、確定爬取的url路徑,headers參數2、發(fā)送請求 -- requests 模擬瀏覽器發(fā)送請求,獲取響應數據3、解析數據 -- re模塊:提供全部的正則表達式功能4、保存數據 -- 保存json格式的數據完整步驟:1、安裝庫和導入模塊如果沒有安裝庫的,可以WIN+R,然后輸入cmd,*輸入代碼安裝pip install requests安裝完成后可以輸入代碼查看你安裝過所有的庫:pip list導入模塊import requests import re import json2、確定爬取的url路徑,headers參數base_url = ' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) /537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}3、發(fā)送請求 -- requests 模擬瀏覽器發(fā)送請求,獲取響應數據response = requests.get(base_url, headers=headers) data = response.text4、解析數據 -- re模塊:提供全部的正則表達式功能href=" 預編譯的代碼對象比直接使用字符串要快,因為解釋器在執(zhí)行字符串形式的代碼前都必須把字符串編譯成代碼對象pattern = re.compile('<h2><a target="_blank" href="(.*?)">(.*?)</a></h2>', re.S) pattern_list = pattern.findall(data) # -->list # json [{[]}]{} # 構建json數據格式 data_list = [] for i in pattern_list: data_dict = {} data_dict['title'] = i[1] data_dict['href'] = i[0] data_list.append(data_dict)5、保存json格式的文件with open("guoke01.json", 'w', encoding='utf-8') as f: f.write(json_data_list)6.構建一個循環(huán)爬取for page in range(1, 101): print("====正在爬取第{}業(yè)數據====n".format(page))優(yōu)化代碼,把page傳遞進去base_url = ' = []*運行代碼,效果如下圖:喜歡的朋友歡迎關注小編,除了分享技術文章之外還有很多福利,私信“資料”可以領取包括不限于Python實戰(zhàn)演練、PDF電子文檔、面試集錦、學習資料等。
就拿大數據說話,優(yōu)勢一目了然,從事IT行業(yè),打開IT行業(yè)的新大門,找到適合自己的培訓機構,進行專業(yè)和系統(tǒng)的學習。
只要一個電話
我們免費為您回電