首页 > 其他 > 详细

爬虫初级文档

时间:2019-09-11 18:34:46      阅读:92      评论:0      收藏:0      [点我收藏+]

1、爬虫是啥?

2、http协议里需要关注的

3、 常用请求库、解析库、数据库的用法

3.1 常用请求库 测试网站:http://httpbin.org/get

request库

? 安装: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(set——cookie)

?           r.history    【相应对象,响应对象。。。】

3.2 常用解析语法

css选择器

? 1、类选择器

? .类名

? 2、id选择器

? #id值

? 3、标签选择器

? 标签名

? 4、后代选择器

? 选择器1 选择器2

? 5、子选择器

? 选择器1>选择器2

? 6、属性选择器

? 【属性名】 【name】

? 【属性名=值】 【name=‘title’】

? 【属性名^=值】 属性以。。开头

? 【属性名$=值】 结尾

? 【属性名*=值】 包含

? 7、群组选择器

? 选择器1,选择器2 or

? 8、多条件选择器

? 选择器1选择器2 and

? p【属性=值】

xpath选择器

? 略

3.3 牛逼的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      绝对路径    基础路径 + /d/ffdsadfsadas.jpg

?                  .links               相对路径

?                      .base_url       基础路径

?                      .html          拿到页面内容  (相当于r.text)

?                      .text          拿到页面上纯文本

?                      .encoding = 'gbk'  

?                      .raw_html      相当于r.context

?                      .qp

? html对象方法:

            r.html.find('css选择器')                   【element对象,element对象,】

?                  .find('css选择器',first = True)     element对象

?                  .xpath(‘xpath选择器’)

?                  .xpath('‘xpath选择器',first = True)

?                  .search(‘模板’)                     search对象

?                       (‘xxx{}yyy{}’)[0]

?                      (‘xxx{name}yyy{pwd}’)[‘name’]

?                  .search_all('模板')                【search对象。search对象】

?                  .render(.....)

?                   **参数:**

?                           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()  //获取浏览器的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})

? .

常用数据库

mongoDB4.0:

下载: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({})  查数据

爬虫与反爬虫的对抗历史

技术分享图片

常见反扒手段

1.检测浏览器headers

2.ip封禁

3.图片验证码

4.滑动模块

5.js轨迹

6.前端反调试

小爬爬

1.爬校花图片

2.爬豆瓣电影

3.校花电影m3u8

4.爬取天猫

? 反爬虫:使用技术手段防止爬虫程序的方法

? 误伤:反扒技术将普通用户识别为爬虫,如果误伤过高,效果再好也不能用

? 成本:反爬虫需要的人力和机器成本

? 拦截:成功拦截爬虫,一般情况下,拦截率越高,误伤率越高

5.分析腾讯视频url

? 接口:https://p2p.1616jx.com/api/api.php?url=vip视频地址

6.登录知乎

? 保存cookie到本地

7.红薯小说(js注入)

script='''
var span_list = document.getElementsByTagName("span")
for (var i=0;i<span_list.length;i++){
    var content = window.getComputedStyle(
        span_list[i], ':before'
    ).getPropertyValue('content');
    span_list[i].innerText = content.replace('"',"").replace('"',"");
}
''' 

爬虫初级文档

原文:https://www.cnblogs.com/huanghongzheng/p/11507583.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!