咩咩?爬爬爬?

爬虫流程

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

用于解析数据库

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

 

原文地址:https://www.cnblogs.com/xzqpy/p/11309958.html