咩咩?爬爬爬?
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, ‘button‘:‘left‘, ‘click‘:1 ‘delay‘:0 ) .down(‘button‘:‘left‘) .up(‘button‘:‘left‘) .move(x,y,‘steps‘:1)
以上是关于咩咩?爬爬爬?的主要内容,如果未能解决你的问题,请参考以下文章