一.爬蟲介紹css
爬蟲是什麼:
爬蟲是一個模仿瀏覽器行爲的向服務器發送請求而且得到數據的應用程序
爬蟲的比喻:
互聯網比如一張大網,數據是網上的獵物,爬蟲就是蜘蛛
爬蟲的價值:
數據的價值
爬蟲的流程:
發起請求-獲取數據--解析數據--存儲數據
二.http協議相關html
請求: Request URL:要去哪兒 Request Method: get: ?ziduan=zhi&ziduan=zhi post: 請求體: formdata json files 請求頭: Cookie:保存信息(主要:記錄用戶登陸狀態) User-Agent:用戶身份 referer:告訴服務器,你從哪裏來 服務器特有字段 響應: Status Code: 2xx: 請求成功 3xx: 重定向 4xx: 5xx: 響應頭: location:重定向的url set—cookie:設置cookie 服務器特定字段 響應體: 1.html代碼 2.二進制:圖片,視頻,音頻 3.json 4.jsonp
三.請求庫web
1.url後拼接參數若是和params重複,以列表方式並存;mongodb
2.header中的cookie與cookies重複,優先顯示header中的cookie;數據庫
3.json與data不能共存;json
4.把cookie保存到本地要導入import http.cookiejar as cookiejar,保存用save方法瀏覽器
5.history以列表套對象方式記錄重定向服務器
''' requests ''' import requests # requests.get() # requests.post() # requests.request(method='post') #get請求 url = 'http://httpbin.org/get?name=mac&age=20&xxx=1000&xxx=yyy' headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36", 'Cookie':'aaa=123;bbb=234' } params = { 'zzz':'mmm', } cookies = { 'ccc':'999' } # url = 'http://www.tmall.com' # # r = requests.get(url=url,headers=headers,params=params,cookies=cookies,allow_redirects=True) # print(r.headers) #post請求 # url = 'http://httpbin.org/post' # # data = { # 'name':'mac', # } # # json = { # 'age':18 # } # # json = [1,True] # # files = { # 'files':open('xxx.txt','rt',encoding='utf-8') # } # # r = requests.post(url=url,files=files) # print(r.text) # url = 'http://www.tmall.com' # r = requests.get(url=url) # print(r.history[0].url) # print(r.url) # session = requests.session() # r = session.get('http://www.baidu.com') # print(r.cookies) # r = session.get('http://httpbin.org/get') # print(r.text) # import http.cookiejar as cookiejar # # session = requests.session() # session.cookies = cookiejar.LWPCookieJar() # # session.cookies.load('1.txt') # print(session.cookies) # r = session.get('http://www.baidu.com') # session.cookies.save('1.txt') r = requests.get(url='http://www.xiaohuar.com') print(r.text)
**安裝**:pip install requests **使用**: **請求**: **①get請求:** ``` 響應對象 = requests.get(......) **參數:** url: headers = {} cookies = {} params = {} proxies = {'http':‘http://端口:ip’} timeout = 0.5 allow_redirects = False ``` **②post請求:** ``` 響應對象 = requests.post(......) **參數:** url: headers = {} cookies = {} data = {} json = {} files = {‘file’:open(...,‘rb’)} timeout = 0.5 allow_redirects = False ``` **自動保存cookie的請求:** ``` session = requests.session() r = session.get(......) r = session.post(......) 補充:(保存cookie到本地) import http.cookiejar as cookielib session.cookie = cookielib.LWPCookieJar() session.cookie.save(filename='1.txt') session.cookies.load(filename='1.txt') ``` **響應:** ``` r.url 請求url r.text 得到響應體文本信息 r.encoding = 'gbk' r.content 二進制 r.json() json.loads(r.text) r.status_code r.headers r.cookies 拿cookie r.history 【相對對象1,響應對象2,。。。】 ```
四.解析相關(css選擇器)cookie
1、類選擇器 .類名 2、id選擇器 #id值 3、標籤選擇器 標籤名 4、後代選擇器 選擇器1 選擇器2 5、子選擇器 選擇器1>選擇器2 6、屬性選擇器 [屬性名] 【屬性名=屬性值】 【屬性名^=值】、 【屬性名$=值】 【屬性名*=值】 7、羣組選擇器 選擇器1,選擇器2.。。 or 8、多條件選擇器 選擇器1選擇器2 and
**安裝:** pip install requests-html **使用:** **請求:** ``` from requests_html import HTMLSession session = HTMLSession() **參數:** browser.args = [ '--no-sand', '--user-agent=XXXXX' ] 響應對象 = session.request(......) 響應對象 = session.get(......) 響應對象 = session.post(......) ``` **參數和requests模塊一毛同樣** **響應:** ``` r.url **屬性和requests模塊一毛同樣 ``` ** **解析:** **html對象屬性:** ``` r.html.absolute_links 絕對路徑 .links 相對路徑 .base_url 根路徑 .html 至關於r.text .text 獲取頁面全部標籤內容 .encoding = 'gbk' (document.charset可查看編碼) .raw_html 至關於r.html(二進制流) .pq 調pyquery庫 ``` **html對象方法:** ``` r.html.find('css選擇器') [element1,.......] .find('css選擇器',first = True) element1 .xpath(‘xpath選擇器’) .xpath('‘xpath選擇器',first = True) .search(‘模板’) (‘xxx{}yyy{}’)[0] (‘xxx{name}yyy{pwd}’)[‘name’] .search_all('模板') .render(.....) r.html.html = 渲染後html文本 **參數:** scripy:「」「 ( ) => { js代碼 js代碼 } 」「」 scrolldow:n sleep:n keep_page:True/False 防止瀏覽器關閉 ``` 繞過瀏覽器檢測 ``` ()=>{ Object.defineProperties(navigator,{ webdriver:{ get: () => undefined } }) ``` **與瀏覽器交互 r.html.page.XXX** ``` asynic def xxx(): await r.html.page.XXX session.loop.run....(xxx()) .screenshot({'path':路徑}) .evaluate('''() =>{js代碼}’‘’}) .cookies() .type('css選擇器',’內容‘,{’delay‘:100}) .click('css選擇器') .focus('css選擇器') .hover('css選擇器') .waitForSelector('css選擇器') .waitFor(1000) ``` **鍵盤事件 r.html.page.keyboard.XXX** ``` .down('Shift') .up('Shift') .press('ArrowLeft') .type('喜歡你啊',{‘delay’:100}) ``` **鼠標事件 r.html.page.mouse.XXX** ``` .click(x,y,{ 'button':'left', 'click':1 'delay':0 }) .down({'button':'left'}) .up({'button':'left'}) .move(x,y,{'steps':1}) ``` .
element屬性:session
a = r.html.find('[class="special"] dd a',first=True) print(a.absolute_links) print(a.links) print(a.text) print(a.html) print(a.attrs.get('href'))
###mongoDB4.0(不在c盤要刪除配置文件中的最後一行):
安裝:略
注意:使用前修改bin目錄下配置文件mongodb.cfg,刪除最後一行的'mp'字段
####1. 啓動服務與終止服務
net start mongodb
net stop mongodb
mongo
use admin
db.createUser({user:"yxp",pwd:"997997",roles:["root"]})
mongo -u adminUserName -p userPassword --authenticationDatabase admin
show dbs 查看數據庫
use db_name 切換數據庫
db.table1.insert({'a':1}) 建立數據庫(切換到數據庫插入表及數據)
db.dropDatabase() 刪數據庫(刪前要切換)
使用前先切換數據庫
show tables 查全部的表
db.table1.insert({'b':2}) 增長表(表不存在就建立)
db.table1.drop() 刪表
db.test.insert(user0) 插入一條
db.user.insertMany([user1,user2,user3,user4,user5]) 插入多條
db.user.find({'name':'alex'}) 查xx==xx
db.user.find({'name':{"$ne":'alex'}}) 查xx!=xx
db.user.find({'_id':{'$gt':2}}) 查xx>xx
db.user.find({"_id":{"$gte":2,}}) 查xx>=xx
db.user.find({'_id':{'$lt':3}}) 查xx<xx
db.user.find({"_id":{"$lte":2}}) 查xx<=xx
db.user.update({'_id':2},{"$set":{"name":"WXX",}}) 改數據
db.user.deleteOne({ 'age': 8 }) 刪第一個匹配
db.user.deleteMany( {'addr.country': 'China'} ) 刪所有匹配
db.user.deleteMany({}) 刪全部
conn = pymongo.MongoClient(host=host,port=port, username=username, password=password)
db = client["db_name"] 切換數據庫
table = db['表名']
table.insert({}) 插入數據
table.remove({}) 刪除數據
table.update({'_id':2},{"$set":{"name":"WXX",}}) 改數據
table.find({}) 查數據