爬虫初级文档

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

python爬虫与项目实战,网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如: (1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。 (2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。 (3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。 (4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。 网络爬虫 为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。 传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值