爬蟲2(一)

一.爬蟲介紹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.。。     or8、多條件選擇器

​        選擇器1選擇器2            and

五.requests-html

**安裝:** 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盤要刪除配置文件中的最後一行):

下載:https://www.mongodb.com/

安裝:略

注意:使用前修改bin目錄下配置文件mongodb.cfg,刪除最後一行的'mp'字段

####1. 啓動服務與終止服務

net start mongodb

net stop mongodb

2.建立管理員用戶

mongo

use admin

db.createUser({user:"yxp",pwd:"997997",roles:["root"]})

3.使用帳戶密碼鏈接mongodb

mongo -u adminUserName -p userPassword --authenticationDatabase admin

4.數據庫

查看數據庫
show dbs 查看數據庫
切換數據庫
 use db_name 切換數據庫
增長數據庫
db.table1.insert({'a':1})  建立數據庫(切換到數據庫插入表及數據)
刪除數據庫
db.dropDatabase()  刪數據庫(刪前要切換)

5.表

使用前先切換數據庫
查看錶
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({}) 刪全部

pymongo

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({}) 查數據
相關文章
相關標籤/搜索