• 咩咩?爬爬爬?


    爬虫流程

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

    用于解析数据库

    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})

     

  • 相关阅读:
    ios9没事,ios7tableviewcell报约束冲突问题
    在导航控制器的rootviewcontroller中push一个控制器 出现view重叠现象
    用mansard对cell的子控件设置约束,并且自动计算cell高度的问题,ios7警告
    textview第一次出现不可滚动文本,但是点击出现键盘,键盘落下,就可以滚动问题
    animateWithDuration 这样的方法,在第二次应用到某个view上动画时间无效问题
    UItoolBar 设置背景颜色
    implicitly declaring library function 'objc_msgSend'with type '(id,SEL,...)' 警告
    侧滑手势移除控制器,pop
    textfield光标消失和故意隐藏需求
    【Debug】IAR右键无法跳转到定义的解决方法
  • 原文地址:https://www.cnblogs.com/xzqpy/p/11309958.html
Copyright © 2020-2023  润新知