但不管怎樣,爬蟲技術是無罪的,還是值得我們開發人員去學習了解一下的。在學習之前,我們還是要先了解一下相關概念。
什么是爬蟲
網絡爬蟲:又被稱為網頁蜘蛛,網絡機器人,是一種按照一定的規則,自動的抓取萬維網信息的程序或者腳本。
大數據時代,要進行數據分析,首先要有數據源,可數據源從哪里來,花錢買,沒預算,只能從其它網站就行抓取。
細分下來,業內分為兩類:爬蟲和反爬蟲。
反爬蟲:顧名思義,就是防止你來我網站或APP上做爬蟲的。
爬蟲工程師和反爬蟲工程師是一對相愛相殺的小伙伴,經常因為對方要加班寫代碼,甚至丟掉工作。比如下面這張圖,大家用心感受一下:
爬蟲的基本原理
如上圖所示,爬蟲的第一個步驟就是對所要爬取的網頁進行請求,以獲取其相應返回的結果,然后在使用一些方法,對響應內容解析,提取想要的內容資源,最后,將提取出來的資源保存起來。
爬蟲工具和語言選擇 一、爬蟲工具
工欲善其事必先利其器的道理相信大家都懂的,想要提升效率,一些常用的工具是必不可少的,以下就是個人推薦的幾款工具:、、、Xpath-
二、爬蟲語言
目前主流的Java、Node.js、C#、等開發語言,都可以實現爬蟲。
所以網絡爬蟲軟件是做什么的,在語言的選擇上,你可以選擇最擅長的語言來進行爬蟲腳本的編寫。
目前爬蟲這塊用的最多的是,因為語法簡潔,方便修改,而且里有多爬蟲相關的庫,拿過來就可以使用,網上的資料也比較多。
爬蟲庫的使用 一、基礎知識
首先要使用語言做爬蟲,需要學習一下的基礎知識,還有HTML、CSS、JS、Ajax等相關的知識。這里,列出中一些與爬蟲相關的庫和框架:
1.1、urllib和urllib2
1.2、Requests
1.3、Beautiful Soup
1.4、Xpath語法與lxml庫
1.5、PhantomJS
1.6、Selenium
1.7、PyQuery
1.8、Scrapy
......
復制代碼
因為時間有限,本文只介紹庫的爬蟲技術,像自動化測試,還有其它庫和框架的資料,感興趣的小伙伴可以自行學習。
二、基礎
2.1、是一個用于測試網站的自動化測試工具,支持各種瀏覽器包括、、等主流界面瀏覽器,同時也支持無界面瀏覽器。
2.2、安裝方式
pip install Selenium
復制代碼
2.3、定位元素的8種方式
爬蟲實例演示
本案例的需求是:抓取豆瓣電影電影信息。
url:https://movie.douban.com/top250
復制代碼
開發工具采用,數據庫采用。
數據庫表腳本:
CREATE TABLE Movies
(
Id INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(20) NOT NULL DEFAULT '',
EName NVARCHAR(50) NOT NULL DEFAULT '',
OtherName NVARCHAR(50) NOT NULL DEFAULT '',
Info NVARCHAR(600) NOT NULL DEFAULT '',
Score NVARCHAR(5) NOT NULL DEFAULT '0',
Number NVARCHAR(20) NOT NULL DEFAULT '0',
Remark NVARCHAR(200) NOT NULL DEFAULT '',
createUser INT NOT NULL DEFAULT 0,
createTime DATETIME DEFAULT GETDATE(),
updateUser INT NOT NULL DEFAULT 0,
updateTime DATETIME DEFAULT GETDATE()
);
復制代碼
爬蟲的第一步,分析url,經過分析,豆瓣電影頁面的url有一定的規則:
每頁顯示25條電影信息,url規則如下,以此類推。
接著,再對網頁源碼進行分析:
最后,編寫爬蟲腳本:
import importlib
import random
import sys
import time
import pymssql
from selenium import webdriver
from selenium.webdriver.common.by import By
# 反爬蟲設置--偽造IP和請求
ip = ['111.155.116.210', '115.223.217.216', '121.232.146.39', '221.229.18.230', '115.223.220.59', '115.223.244.146',
'180.118.135.26', '121.232.199.197', '121.232.145.101', '121.31.139.221', '115.223.224.114']
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
'X-Requested-With': 'XMLHttpRequest',
'X-Forwarded-For': ip[random.randint(0, 10)],
'Host': ip[random.randint(0, 10)]
}
importlib.reload(sys)
try:
conn = pymssql.connect(host="127.0.0.1", user="sa", password="123", database="MySchool",charset="utf8")
except pymssql.OperationalError as msg:
print("error: Could not Connection SQL Server!please check your dblink configure!")
sys.exit()
else:
cur = conn.cursor()
def main():
for n in range(0, 10):
count = n*25
url = 'https://movie.douban.com/top250?start='+str(count)
j = 1
# if(n == 7):
# j = 5
for i in range(j, 26):
driver = webdriver.PhantomJS(desired_capabilities=headers) # 封裝瀏覽器信息
driver.set_page_load_timeout(15)
driver.get(url) # 加載網頁
# data = driver.page_source # 獲取網頁文本
# driver.save_screenshot('1.png') # 截圖保存
name = driver.find_elements(By.XPATH, "http://ol/li["+str(i)+"]/div/div/div/a/span")[0].text.replace('\'', '')
ename = driver.find_elements(By.XPATH, "http://ol/li["+str(i)+"]/div/div/div/a/span")[1].text.replace("/", "").replace(" ", "").replace('\'', '')
try:
otherName = driver.find_elements(By.XPATH, "http://ol/li["+str(i)+"]/div/div/div/a/span")[2].text.lstrip(' / ').replace("/", "|").replace(" ", "").replace('\'', '')
except:
otherName = ''
info = driver.find_elements(By.XPATH, "http://ol/li["+str(i)+"]/div/div/div/p")[0].text.replace("/", "|").replace(" ", "").replace('\'', '')
score = driver.find_elements(By.XPATH, "http://ol/li["+str(i)+"]/div/div/div/div/span[2]")[0].text.replace('\'', '')
number = driver.find_elements(By.XPATH, "http://ol/li["+str(i)+"]/div/div/div/div/span[4]")[0].text.replace("人評價", "").replace('\'', '')
remark = driver.find_elements(By.XPATH, "http://ol/li["+str(i)+"]/div/div/div/p/span")[0].text.replace('\'', '')
sql = "insert into Movies(Name,EName,OtherName,Info,Score,Number,Remark) values('"+name + \
"','"+ename+"','"+otherName+"','"+info + \
"','"+score+"','"+number+"','"+remark+"') "
try:
cur.execute(sql)
conn.commit()
print("第"+str(n)+"頁,第"+str(i)+"條電影信息新增成功")
time.sleep(30)
except:
conn.rollback()
print("新增失?。?+sql)
driver.quit()
if __name__ == '__main__':
main()
復制代碼
成果展示:
最后
作為一個IT的過來人,我自己整理了一些學習資料網絡爬蟲軟件是做什么的,都是別人分享給我的,希望對你們有幫助。
學好 不論是就業還是做副業賺錢都不錯,但要學會 還是要有一個學習規劃。
朋友們如果需要可以微信掃描下方CSDN官方認證二維碼免費領取【保證100%免費】。
一、所有方向的學習路線
所有方向的技術點做的整理,形成各個領域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。
二、必備開發工具
三、視頻合集
觀看零基礎學習視頻,看視頻學習是最快捷也是最有效果的方式,跟著視頻中老師的思路,從基礎到深入,還是很容易入門的。
四、實戰案例
光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。
五、練習題
檢查學習結果。
六、面試資料
我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有阿里大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
最后,千萬別辜負自己當時開始的一腔熱血,一起變強大變優秀。