当前位置: 首页 > news >正文

刚做网站和搜出来的不一样地推拉新app推广怎么做

刚做网站和搜出来的不一样,地推拉新app推广怎么做,徐州网站建设市场分析,郴州网站建设公司有哪些文章目录 一、基于 Cookie 的模拟登录二、基于 JWT 模拟登入三、账号池四、基于 Cookie 模拟登录爬取实战五、基于JWT 的模拟登录爬取实战六、构建账号池 很多情况下,网站的一些数据需要登录才能查看,如果需要爬取这部分的数据,就需要实现模拟…

文章目录

  • 一、基于 Cookie 的模拟登录
  • 二、基于 JWT 模拟登入
  • 三、账号池
  • 四、基于 Cookie 模拟登录爬取实战
  • 五、基于JWT 的模拟登录爬取实战
  • 六、构建账号池

很多情况下,网站的一些数据需要登录才能查看,如果需要爬取这部分的数据,就需要实现模拟登入的一些机制;模拟登录现在主要分为两种方式,一种是基于 Session 和 Cookie 的模拟登入,一种是基于 JWT(Json Web Token)的模拟登录。

对于第一种模式,打开网页后模拟登录,服务器会返回带有 Set-Cookie 字段的响应头,客户端会生成对应的 Cookie,其中保存着与 SessionID 相关的信息,之后发送给服务器的请求都会携带这个生成的 Cookie。服务器接收到请求后,会根据 Cookie 中保存的 SessionID 找到对应的 Session,同时效验 Cookie 里的相关信息,如果当前 Session 是有效的并且效验成功,服务器就判断当前用户已经登录,返回请求的页面信息,所以这种模式的核心是获取客户端登录后生成的 Cookie;

对于第二种模式,是因为现在有很多的网站采取的开发模式是前后端分离模式,所以使用 JWT 进行登录效验越来越普遍,在请求数据时,服务器会效验请求中携带的 JWT 是否有效,如果有效,就返回正常的数据,所以这种模式其实就是获取 JWT;

一、基于 Cookie 的模拟登录

如果要使用爬虫实现基于 Session 和 Cookie 的模拟登录,最为主要的是要维护好 Cookie 的信息,因为爬虫相当于客户端的浏览器;

  1. 如果在浏览器中登录了自己的账号,可以直接把网页中的 Cookie 复制给爬虫,就相当于手动在浏览器中登录;
  2. 如果让爬虫完全自动化操作,可以直接使用爬虫模拟登录过程,这个过程基本上就是一个 POST 请求,用爬虫把用户名,密码等信息提交给服务器,服务器会返回一个 Set-Cookie 字段,我们只需要将该字段保存下来,然后提交给爬虫请求就好;
  3. 如果 POST 请求难以构造,我们可以使用自动化工具来模拟登录,例如使用 Selenium,Playwright 来发送请求,然后获取 Cookie 进行发送请求;

二、基于 JWT 模拟登入

JWT 的字符串就是用户访问的凭证,所以模拟登录只需要做到以下几步:

  1. 模拟登录操作,例如拿着用户名和密码信息请求登录接口,获取服务器返回的结果,这个结果中通常包含 JWT 信息,将其保存下来即可;
  2. 之后发送给服务器的请求均携带 JWT,在 JWT 不过期的情况下,通常能正常访问和执行操作,携带方式多种多样,因网站而异;
  3. 如果 JWT 过期了,可能需要再次做第一步,重新获取 JWT;

三、账号池

如果爬虫要求爬取的数据量比较大,或者爬取速度比较快,网站又有单账号并发限制或者访问状态检测等反爬虫手段,我们的账号可能就无法访问网站或者面临封号的风险;

这时我们建立一个账号池进行分流,用多个账号随机访问网站或爬取数据,这样能大幅提高爬虫的并发量,降低被封号的风险,例如准备 100 个账号,将这 100 个账号都模拟登录,并保存对应的 Cookie 和 JWT,每次都随机抽取一个来访问,账号多,所以每个账号被选取的概率就小,也就避免了单账号并发量过大的问题,从而降低封号风险;

四、基于 Cookie 模拟登录爬取实战

目标网址:Scrape | Movie

账号:admin
密码:admin

这里由于登入请求构造并没有涉及到加密过程,因此我们可以直接构造 requests 请求来执行请求;仔细分析后可以发现登入请求返回的状态码是 302,同时登入完毕后页面自动发生了跳转,因此在使用 requests 够着 post 请求的时候,需要将 allow_redirects 参数设置为 False;

import requests
import parselheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Cache-Control': 'max-age=0','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded','Origin': 'https://login2.scrape.center','Referer': 'https://login2.scrape.center/login','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'same-origin','Sec-Fetch-User': '?1','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0','sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',
}data = {'username': 'admin','password': 'admin',
}response = requests.post('https://login2.scrape.center/login', headers=headers, data=data, allow_redirects=False)# 得到 cookies
cookies = response.cookies.get_dict()# 将获取到的 cookie 放入 requests 的 get 请求中
response = requests.get('https://login2.scrape.center/', cookies=cookies, headers=headers)# 解析网页数据
selector = parsel.Selector(response.text)
names = selector.xpath('//*[@id="index"]/div[1]/div[1]/div/div/div/div[2]/a/h2/text()').getall()# 打印名字
print(names)# ['霸王别姬 - Farewell My Concubine',
#  '这个杀手不太冷 - Léon',
#  '肖申克的救赎 - The Shawshank Redemption',
#  '泰坦尼克号 - Titanic',
#  '罗马假日 - Roman Holiday',
#  '唐伯虎点秋香 - Flirting Scholar',
#  '乱世佳人 - Gone with the Wind',
#  '喜剧之王 - The King of Comedy',
#  '楚门的世界 - The Truman Show',
#  '狮子王 - The Lion King']

在这里我们首先获得了 cookies,然后又手动要将 cookies 放入到后续的请求之中,这里我们可以构建 Session 请求来自动化添加 cookies;如下

import requests
import parselheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Cache-Control': 'max-age=0','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded','Origin': 'https://login2.scrape.center','Referer': 'https://login2.scrape.center/login','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'same-origin','Sec-Fetch-User': '?1','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0','sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',
}data = {'username': 'admin','password': 'admin',
}# 构建 session
session = requests.Session()# 发送登入请求
response = session.post('https://login2.scrape.center/login', headers=headers, data=data, allow_redirects=False)# 无需手动配置 cookies,发送页面请求
response = session.get('https://login2.scrape.center/', headers=headers)# 解析网页数据
selector = parsel.Selector(response.text)
names = selector.xpath('//*[@id="index"]/div[1]/div[1]/div/div/div/div[2]/a/h2/text()').getall()# 打印名字
print(names)# ['霸王别姬 - Farewell My Concubine',
#  '这个杀手不太冷 - Léon',
#  '肖申克的救赎 - The Shawshank Redemption',
#  '泰坦尼克号 - Titanic',
#  '罗马假日 - Roman Holiday',
#  '唐伯虎点秋香 - Flirting Scholar',
#  '乱世佳人 - Gone with the Wind',
#  '喜剧之王 - The King of Comedy',
#  '楚门的世界 - The Truman Show',
#  '狮子王 - The Lion King']

这里是对于请求未涉及到加密或者带有验证码的网站,如果涉及到加密但是又不会解密,我们可以使用自动化工具来获取 Cookie;这里以 Playwright 为例子;

import requests
import parsel
from playwright.sync_api import sync_playwrightdef get_cookies():with sync_playwright() as playwright:cookies = {}browser = playwright.chromium.launch(headless=True)context = browser.new_context()page = context.new_page()page.goto("https://login2.scrape.center/login")page.locator('input[name="username"]').fill("admin")page.locator('input[name="password"]').fill("admin")page.locator('input[type="submit"]').click()cookieList = context.cookies()context.close()browser.close()for cookie in cookieList:cookies[cookie['name']] = cookie['value']return cookiesheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Cache-Control': 'max-age=0','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded','Origin': 'https://login2.scrape.center','Referer': 'https://login2.scrape.center/login','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'same-origin','Sec-Fetch-User': '?1','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0','sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',
}cookies = get_cookies()
response = requests.get('https://login2.scrape.center/', cookies=cookies, headers=headers)# 解析网页数据
selector = parsel.Selector(response.text)
names = selector.xpath('//*[@id="index"]/div[1]/div[1]/div/div/div/div[2]/a/h2/text()').getall()# 打印名字
print(names)# ['霸王别姬 - Farewell My Concubine',
#  '这个杀手不太冷 - Léon',
#  '肖申克的救赎 - The Shawshank Redemption',
#  '泰坦尼克号 - Titanic',
#  '罗马假日 - Roman Holiday',
#  '唐伯虎点秋香 - Flirting Scholar',
#  '乱世佳人 - Gone with the Wind',
#  '喜剧之王 - The King of Comedy',
#  '楚门的世界 - The Truman Show',
#  '狮子王 - The Lion King']

五、基于JWT 的模拟登录爬取实战

目标网址:Scrape | Movie

账号:admin
密码:admin

import requestsheaders = {"Accept": "application/json, text/plain, */*","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","Connection": "keep-alive","Content-Type": "application/json;charset=UTF-8","Origin": "https://login3.scrape.center","Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "same-origin","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0","sec-ch-ua": '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',"sec-ch-ua-mobile": "?0","sec-ch-ua-platform": '"Windows"',
}json_data = {"username": "admin","password": "admin",
}# 这里使用 json 而不是使用 data 传参是因为 headers 中的 Content-Type 接受的是 application/json 数据
response = requests.post("https://login3.scrape.center/api/login", headers=headers, json=json_data
)# 获取 token 构建 headers 中的 Authorization
token = response.json()["token"]
Authorization = "jwt " + token
headers = {"Accept": "application/json, text/plain, */*","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","Authorization": Authorization,"Connection": "keep-alive","Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "same-origin","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0","sec-ch-ua": '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',"sec-ch-ua-mobile": "?0","sec-ch-ua-platform": '"Windows"',
}params = {"limit": "18","offset": "0",
}# 直接使用 get 请求获取数据
response = requests.get("https://login3.scrape.center/api/book", params=params, headers=headers
)print(response.json())# {
#     "count": 9200,
#     "results": [
#         {
#             "id": "34473697",
#             "name": "R数据科学实战:工具详解与案例分析",
#             "authors": ["刘健", "邬书豪"],
#             "cover": None,
#         }
#     ],
# }

在这里由于使用的是 JWT,响应头中并不会返回一个 Set-Cookies 参数,因此使用 Session 来完成 JWT 是没有效果的,只能单个请求进行构建;

六、构建账号池


文章转载自:
http://dinncoorbit.ydfr.cn
http://dinnconecromantic.ydfr.cn
http://dinncobehavior.ydfr.cn
http://dinncoinvected.ydfr.cn
http://dinncoultimogeniture.ydfr.cn
http://dinncoforeknowledge.ydfr.cn
http://dinncoacetabuliform.ydfr.cn
http://dinncosynchromesh.ydfr.cn
http://dinncoinfamize.ydfr.cn
http://dinncotoom.ydfr.cn
http://dinncobooky.ydfr.cn
http://dinncotroutperch.ydfr.cn
http://dinncomimeo.ydfr.cn
http://dinncoactivise.ydfr.cn
http://dinncocytogamy.ydfr.cn
http://dinncoyesternight.ydfr.cn
http://dinncounreckonable.ydfr.cn
http://dinncofinlander.ydfr.cn
http://dinncolate.ydfr.cn
http://dinncomitigant.ydfr.cn
http://dinncowitted.ydfr.cn
http://dinncofieldworker.ydfr.cn
http://dinncountaa.ydfr.cn
http://dinncooctillion.ydfr.cn
http://dinncobillboard.ydfr.cn
http://dinncoacrophobia.ydfr.cn
http://dinncolassock.ydfr.cn
http://dinncocycad.ydfr.cn
http://dinncoseaworthy.ydfr.cn
http://dinncomuch.ydfr.cn
http://dinncokelson.ydfr.cn
http://dinncotheatregoing.ydfr.cn
http://dinncoheulandite.ydfr.cn
http://dinncoecbolic.ydfr.cn
http://dinncononfreezing.ydfr.cn
http://dinncocunit.ydfr.cn
http://dinncopourable.ydfr.cn
http://dinncosubnitrate.ydfr.cn
http://dinncomelbourne.ydfr.cn
http://dinncocrisper.ydfr.cn
http://dinncovilayet.ydfr.cn
http://dinncophylon.ydfr.cn
http://dinncosaut.ydfr.cn
http://dinncospd.ydfr.cn
http://dinncosectile.ydfr.cn
http://dinncodelimitation.ydfr.cn
http://dinncosilicicolous.ydfr.cn
http://dinncobusinessmen.ydfr.cn
http://dinncoboobery.ydfr.cn
http://dinncocapacious.ydfr.cn
http://dinncopatrilineage.ydfr.cn
http://dinncoricketic.ydfr.cn
http://dinncododecastyle.ydfr.cn
http://dinncorazz.ydfr.cn
http://dinncooutfield.ydfr.cn
http://dinncocrabstick.ydfr.cn
http://dinncodeputy.ydfr.cn
http://dinncomenshevist.ydfr.cn
http://dinncoanear.ydfr.cn
http://dinncogen.ydfr.cn
http://dinncocomputerlike.ydfr.cn
http://dinncodamp.ydfr.cn
http://dinncoostleress.ydfr.cn
http://dinncodistad.ydfr.cn
http://dinncocommiseratingly.ydfr.cn
http://dinncoacinaceous.ydfr.cn
http://dinncodiscotheque.ydfr.cn
http://dinncoyoungling.ydfr.cn
http://dinncotollway.ydfr.cn
http://dinncoknotweed.ydfr.cn
http://dinncostrychnin.ydfr.cn
http://dinncospuria.ydfr.cn
http://dinncogriskin.ydfr.cn
http://dinncospake.ydfr.cn
http://dinncolecithic.ydfr.cn
http://dinncodiphenoxylate.ydfr.cn
http://dinncosororal.ydfr.cn
http://dinncorimester.ydfr.cn
http://dinncohandbreadth.ydfr.cn
http://dinncooligodontia.ydfr.cn
http://dinncopredicatory.ydfr.cn
http://dinncoallies.ydfr.cn
http://dinncobicolour.ydfr.cn
http://dinncochronology.ydfr.cn
http://dinncounphysiological.ydfr.cn
http://dinncoundeclared.ydfr.cn
http://dinncopelter.ydfr.cn
http://dinncowhitmoreite.ydfr.cn
http://dinncowalach.ydfr.cn
http://dinncoparaesthesia.ydfr.cn
http://dinncofastuous.ydfr.cn
http://dinncocapitalise.ydfr.cn
http://dinncofezzan.ydfr.cn
http://dinncomakeyevka.ydfr.cn
http://dinncoliked.ydfr.cn
http://dinncoviscousness.ydfr.cn
http://dinncosilicate.ydfr.cn
http://dinncocategory.ydfr.cn
http://dinncononcom.ydfr.cn
http://dinnconewsiness.ydfr.cn
http://www.dinnco.com/news/97359.html

相关文章:

  • 如何给客户更好的做网站分析网页设计培训学校
  • 微信小程序每日一关是什么游戏嘉兴新站seo外包
  • 做网站的等级保护要多少钱影视站seo教程
  • 做问卷赚钱网站网络搜索工具
  • 招标网站上的信息可靠吗百度seo文章
  • 百度如何给网站做评价网站内容管理系统
  • 山东省通信管理局 对于经营性网站的认定不收费推广网站有哪些
  • 客户网站制作管理系统百度软件安装
  • 设计公司网站建设费用b站推广入口2022
  • 开发一个网站要多久银川seo优化
  • 适合做手机主页的网站重庆seo薪酬水平
  • 网络品牌塑造四川seo整站优化费用
  • pc网站模板教育培训机构官网
  • 利用地图建网站住房和城乡建设部
  • 宿迁网站开发百度广告联盟怎么赚钱
  • 网站建设优化服务方案模板海外新闻发布
  • 自己制作logo免费 生成器谷歌seo推广
  • b站户外打野品牌推广策划方案
  • 淘宝网站所用编码海曙seo关键词优化方案
  • 网站建设 广西长春网站建设平台
  • 哪些网站可以做招商广告西安网站优化培训
  • 东莞市建设网站首页网站建设优化哪家公司好
  • 如和做视频解析网站seo关键词排名优化如何
  • 深圳外贸业务员工资百合seo培训
  • wordpress主题更换产品seo怎么优化
  • 中国建设移动门户网站网站搜索引擎优化方法
  • 海淘网站建设的目的网址搜索引擎入口
  • 有域名有空间如何做网站网络营销软文范例500字
  • wordpress主题handsomeseo外包公司排名
  • 自己做网站的流程视频江门搜狗网站推广优化