咩咩?爬爬爬?

Posted xzqpy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了咩咩?爬爬爬?相关的知识,希望对你有一定的参考价值。

爬虫流程

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

用于解析数据库

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)

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于咩咩?爬爬爬?的主要内容,如果未能解决你的问题,请参考以下文章

❤️爬爬爬,光会爬怎么行!快来看看别人都是咋反爬的!❤️建议收藏

爬爬爬山

Java爬爬学习之WebMagic

Python小春网爬爬

小爬爬6:中间件

JAVA网络爬爬学习之HttpClient+Jsoup