zoukankan      html  css  js  c++  java
  • 咩咩?爬爬爬?

    爬虫流程

    发送请求--获得数据--解析数据--存储数据

    用于解析数据库

    bs4    pyquery   re  

    请求特别关心

    URL  method  Header:  Cookie 存储 Referer上一次跳转  User-Agent请求头

    响应特别关心

    不要把status 作为请求是否成功的结果

    处理发送请求的requests库

    响应对象 = requests.get(......)  

    携带的参数  

    url 

    headers = {}     #请求头

    cookies = {}    #请求cookie

    params = {}   #请求携带的参数

    proxies = {'http':‘http://端口:ip’} #代理

    timeout   #超时时间

    allow_redirects = False #不允许跳转

    响应对象 = requests.post(......)

    ​ url:

    ​ headers = {} 

    ​ cookies = {}

    ​ data = {}    #表单

    ​ json = {}   #jason

    ​ files = {‘file’:open(...,‘rb’)} #文件

    ​ timeout = 0.5

    ​ allow_redirects = False

    自动保存cookie的请求

    session=request.session() #先使用session发送请求,登陆网站,把cookie保存在session中
    
    response=session.get(url,headers) #下次再使用session请求登陆后才能访问网站,session能够自动的携带登陆成功的session 

    保存cookie到本地

    import http.cookiejar as cookielib
    session.cookie = cookielib.LWPCookieJar()
    session.cookie.save(filename='1.txt')
    session.cookies.load(filename='1.txt')

    响应的方法

    r.url  
    r.text
    r.encoding = 'gbk'
    r.content
    r.json()
    r.status_code
    r.headers
    r.cookies
    r.history

    牛逼请求库2

    requests-html

    pip install requests-html
    from requests_html import HTMLSession
    session = HTMLSession()
    
    **参数:**
    browser.args = ['--no-sand',
    '--user-agent =XXXXX']  #默认是无头,这怎么可以?容易被识别 必须改掉,空格一定不能有
    session = HTMLSession(browser_args=['--no-sand','--user-agent=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'],headless=False)

    requests-html  res.html 对象属性与方法

    属性

    from requests_html  import HTMLSession
    session = HTMLSession()
    res=session.get(r"http://www.tuniu.com/?p=15295&utm_source=baidu&utm_medium=cpc&utm_campaign=SE&fc=u9765489.k22013360876.a6753602032.pb")
    print(res.html.absolute_links)
    其他:
    .absolute_link 绝对的link url组成的列表
    .links #原来的连接 .base_url #根域名 .html .text .encoding
    = 'gbk' .raw_html #二进制流 .pq     #
    
    
     

    实例化HTTPsession() 会下载drive 

    方法

    r.html.find('css选择器')
            .find('css选择器',first = True)
            .xpath(‘xpath选择器’)
            .xpath('css选择器',first = True)    
            .search(‘模板’)
         
    .search__all(‘模板’)
      
    print(res.html.search_all("[国庆]<{name}总统府")) #【Result_obj,Result_obj,Result_obj】

    print(res.html.search("[国庆]<{name}总统府")) #Result_obj

    使用request-html注意点

    把head-less设成False

    try:
        r.html.render(script=scrapts,sleep=1,keep_page=True)
        async def main():
            # await r.html.page.screenshot({"path":'2.png','clip':{'x':200,'y':200,'width':400,'height':400}})  #截屏
            # res = await r.html.page.evaluate('''
            # ()=>{
            #     var a = document.querySelector("#list")
            #     return {'x':a.offsetLeft}
            # }
            # ''')
            # print(res)
            # print(await r.html.page.cookies())
            # await r.html.page.type('#kw','泷泽萝拉',{'delay':500})
            # await r.html.page.waitForSelector('[name="tj_trnews"]')
            # await r.html.page.click('[name="tj_trnews"]')
            # await r.html.page.focus('[type="number"]')
            # await r.html.page.keyboard.type('111111',{'delay':200})
            # await r.html.page.hover('[data-stat-id="6f5c93b4d1baf5e9"]')
            # await r.html.page.keyboard.type('喜欢你啊啊啊', {'delay': 200})
            # await r.html.page.keyboard.down('Shift')
            # for i in range(3):
            #     await r.html.page.keyboard.press('ArrowLeft',{'delay': 1000})
            # await r.html.page.keyboard.up('Shift')
            # await r.html.page.keyboard.press('Backspace')
            res = await r.html.page.evaluate('''
            ()=>{
                var a = document.querySelector('[alt="【究极爆肝】德克萨斯与拉普兰德的感伤往事(明日方舟描改 动画手书·完整版)"]')
                return {
                    'x':a.x+a.width/2,
                    'y':a.y+a.height/2
                }
            }
            ''')
            print(res)
            # await r.html.page.mouse.move(res['x'],res['y'],{'steps':200})
            # await r.html.page.mouse.down({'button':'right'})
            # await r.html.page.mouse.up({'button':'right'})
            # await r.html.page.mouse.click(res['x'],res['y'])
    
    
            await r.html.page.waitFor(5000)
    
    
    
        session.loop.run_until_complete(main())
    finally:
        session.close()

    keep_page需改为True否则无法对渲染页面进行操作

    与浏览器进行交互

    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}) #输入 每个间隔控制在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})

     

  • 相关阅读:
    Read Table Binary Search读得field一定要按照Sort的顺序
    Retail Article Master Data 学习 (三) Reference Handling 和 Deviation
    像QQ一样的,好用的Navbar
    sql 脚本执行类
    Page.RegisterRequiresRaiseEvent()与Page.RegisterRequiresPostBack()方法
    ASP.Net实现文件的在线压缩和解压缩
    Word maker! 最大流dinic
    POJ 3258 River Hopscotch 二分查找
    C/C++浮点数在内存中的存储方式《转》
    opencv图像处理8卷积
  • 原文地址:https://www.cnblogs.com/xzqpy/p/11309958.html
Copyright © 2011-2022 走看看