發布時間:2023-03-03 20:20:40 作者:佚名 閱讀:(4)
首先你要明白什么是爬蟲,爬蟲,又名“網絡爬蟲”,就是能夠自動訪問互聯網并將網站內容下載下來的程序。它也是搜索引擎的基礎。Python爬蟲就是使用Python程序開發的網絡爬蟲,是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。
爬蟲的原理
發起請求:通過HTTP協議向目標站點發送請求(一個request),然后等待目標站點服務器的響應。
獲取響應內容:如果服務器能正常響應,會得到一個Response。Response的內容便是所要獲取的頁面內容,響應的內容可能有HTML,Json串,二進制數據(如圖片視頻)等等。
解析內容:得到的內容可能是HTML,可以用正則表達式、網頁解析庫進行解析;可能是Json,可以直接轉為Json對象解析;可能是二進制數據,可以做保存或者進一步的處理。
保存數據:數據解析完成后,將保存下來。既可以存為文本文檔、可以存到數據庫中。
Python爬蟲實例
前面介紹了爬蟲的定義、作用、原理等信息,相信有不少小伙伴已經開始對爬蟲感興趣了,準備躍躍欲試呢。那現在就來上“干貨”,直接貼上一段簡單Python爬蟲的代碼:
1.前期準備工作:安裝Python環境、安裝PYCHARM軟件、安裝MYSQL數據庫、新建數據庫exam、在exam中建一張用于存放爬蟲結果的表格house[SQL語句:create table house(price varchar(88),unit varchar(88),area varchar(88));]
2.爬蟲的目標:爬取鏈家租房網上(url: https://bj.lianjia.com/zufang/)首頁中所有鏈接里的房源的價格、單位及面積,然后將爬蟲結構存到數據庫中。
3.爬蟲源代碼:如下
import requests #請求URL頁面內容
from bs4 import BeautifulSoup #獲取頁面元素
import pymysql #鏈接數據庫
import time #時間函數
import lxml #解析庫(支持HTML\XML解析,支持XPATH解析)
#get_page 函數作用:通過requests的get方法得到url鏈接的內容,再整合成BeautifulSoup可以處理的格式
def get_page(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
return soup
#get_links 函數的作用:獲取列表頁所有租房鏈接
def get_links(link_url):
soup = get_page(link_url)
links_div = soup.find_all('div',class_="pic-panel")
links=[div.a.get('href') for div in links_div]
return links
#get_house_info函數作用是:獲取某一個租房頁面的信息:價格、單位、面積等
def get_house_info(house_url):
soup = get_page(house_url)
price =soup.find('span',class_='total').text
unit = soup.find('span',class_='unit').text.strip()
area = 'test' #這里area字段我們自定義一個test做測試
info = {
'價格':price,
'單位':unit,
'面積':area
}
return info
#數據庫的配置信息寫到字典
DataBase ={
'host': '127.0.0.1',
'database': 'exam',
'user' : 'root',
'password' : 'root',
'charset' :'utf8mb4'}
#鏈接數據庫
def get_db(setting):
return pymysql.connect(**setting)
#向數據庫插入爬蟲得到的數據
def insert(db,house):
values = "'{}',"*2 + "'{}'"
sql_values = values.format(house['價格'],house['單位'],house['面積'])
sql ="""
insert into house(price,unit,area) values({})
""".format(sql_values)
cursor = db.cursor()
cursor.execute(sql)
db.commit()
#主程序流程:1.連接數據庫 2.得到各個房源信息的URL列表 3.FOR循環從第一個URL開始獲取房源具體信息(價格等)4.一條一條地插入數據庫
db = get_db(DataBase)
links = get_links('https://bj.lianjia.com/zufang/')
for link in links:
time.sleep(2)
house = get_house_info(link)
insert(db,house)
首先,“工欲善其事必先利其器”,用Python寫爬蟲程序也是一樣的道理,寫爬蟲過程中需要導入各種庫文件,正是這些及其有用的庫文件幫我們完成了爬蟲的大部分工作,我們只需要調取相關的借口函數即可。導入的格式就是import庫文件名。這里要注意的是在PYCHARM里安裝庫文件,可以通過光標放在庫文件名稱上,同時按ctrl+alt 鍵的方式來安裝,也可以通過命令行(Pip install 庫文件名)的方式安裝,如果安裝失敗或者沒有安裝,那么后續爬蟲程序肯定會報錯的。在這段代碼里,程序前五行都是導入相關的庫文件:requests用于請求URL頁面內容;BeautifulSoup用來解析頁面元素;pymysql用于連接數據庫;time包含各種時間函數;lxml是一個解析庫,用于解析HTML、XML格式的文件,同時它也支持XPATH解析。
其次,我們從代碼最后的主程序開始看整個爬蟲流程:
通過get_db函數連接數據庫。再深入到get_db函數內部,可以看到是通過調用
Pymysql的connect函數來實現數據庫的連接的,這里**seting是Python收集關鍵字參數的一種方式,我們把數據庫的連接信息寫到一個字典DataBase里了,將字典里的信息傳給connect做實參。
通過get_links函數,獲取鏈家網租房首頁的所有房源的鏈接。所有房源的鏈接以列表形式存在Links里。get_links函數先通過requests請求得到鏈家網首頁頁面的內容,再通過BeautifuSoup的接口來整理內容的格式,變成它可以處理的格式。最后通過電泳find_all 函數找到所有包含圖片的div樣式,再通過一個for循環來獲得所有div樣式里包含的超鏈接頁簽(a)的內容(也就是 href 屬性的內容),所有超鏈接都存放在列表links中。
通過FOR循環,來遍歷links中的所有鏈接(比如其中一個鏈接是:https://bj.lianjia.com/zufang/101101570737.html)
用和2)同樣的方法,通過使用find函數進行元素定位獲得3)中鏈接里的價格、單位、面積信息,將這些信息寫到一個字典Info里面。
調用insert函數將某一個鏈接里得到的Info信息寫入數據庫的house表中去。深入到insert函數內部,我們可以知道它是通過數據庫的游標函數cursor()來執行一段SQL語句然后數據庫進行commit操作來實現響應功能。這里SQL語句的寫法比較特殊,用
到了format函數來進行格式化,這樣做是為了便于函數的復用。
最后,運行一下爬蟲代碼,可以看到鏈家網的首頁所有房源的信息都寫入到數據里了。(注:test是我手動指定的測試字符串)
總結:
Python爬蟲就是使用Python程序開發的網絡爬蟲,是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。主要用于搜索引擎,它將一個網站的所有內容與鏈接進行閱讀,并建立相關的全文索引到數據庫中,然后跳到另一個網站。
爬蟲一般是指網絡資源的抓取,由于Python的腳本特性,易于配置對字符的處理非常靈活,Python有豐富的網絡抓取模塊,因此兩者經常聯系在一起Python就被叫作爬蟲。爬蟲可以抓取某個網站或者某個應用的內容提取有用的價值信息。還可以模擬用戶在瀏覽器或者app應用上的操作行為,實現程序自動化。
Python非常適合開發網絡爬蟲的編程語言,相比于其他靜態編程語言,Python抓取網頁文檔的接口更簡潔;相比于其他動態腳本語言,Python的urllib2包提供了較為完整的訪問網頁文檔的API。Python中有優秀的第三方包可以高效實現網頁抓取,并可用極短的代碼完成網頁的標簽過濾功能。
歡迎分享轉載→ python爬蟲是什么意思?一文帶你快速了解
? 2015-2021 - 吾愛編程網 版權所有 蘇ICP備18033726號-1關于我們 - 網站聲明 - 聯系我們