码迷,mamicode.com
首页 > 其他好文 > 详细

咩咩?爬爬爬?

时间:2019-08-07 21:02:41      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:response   async   query   imp   参数   原来   com   range   def   

爬虫流程

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

用于解析数据库

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,{
                buttonleft,
                click:1
                delay:0
            })
.down({buttonleft})
.up({buttonleft})
.move(x,y,{steps:1})

 

 

 

 

 

 

 

 

 

 

 

 

咩咩?爬爬爬?

标签:response   async   query   imp   参数   原来   com   range   def   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!