zoukankan      html  css  js  c++  java
  • 爬虫初级文档

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

    爬虫与反爬虫的对抗历史

    1565136366701

    常见反扒手段

    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('"',"");
    }
    ''' 
    
  • 相关阅读:
    使用httpVueLoader加载vue单页面不用脚手架的方法
    uniapp微信小程序登录,获取手机号,支付,分享,消息订阅功能
    uniapp UI库 uview
    vue change阻止默认事件已解决
    elementui 添加和修改使用同一个表单清除表单数据和验证!!
    uniapp 分类实现多条件筛选
    uniapp 小程序订阅消息爬坑记
    时间选择器datetimerpicker封装使用(非脚手架)
    elementui 表单(添加和修改使用同一个)重置 && 开关(关键点)
    uniapp 小程序订阅消息
  • 原文地址:https://www.cnblogs.com/huanghongzheng/p/11507583.html
Copyright © 2011-2022 走看看