爬虫初级文档

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('"',"");
}
''' 
原文地址:https://www.cnblogs.com/huanghongzheng/p/11507583.html