爬虫基本原理介绍、实现以及问题解决

文章目录

  • 一、爬虫的意义
    • 1.前言
    • 2.爬虫能做什么
    • 3.爬虫有什么意义
  • 二、爬虫的实现
    • 1.爬虫的基础原理
    • 2.api的获取
    • 3.爬虫实现
  • 三、反爬解决方案
    • 1.反爬的实现方式
    • 2.反爬的解决方法
    • 3.反爬的实现代码
    • 4.IPIDEA还能做什么
  • 四、总结


请添加图片描述

一、爬虫的意义

1.前言

最近拉开了毕业季的序幕,提前批开启了大厂抢人模式,所以很多人都开始在力扣刷题, 希望能够在大厂抢人的时期脱颖而出。为了能实现群内力扣刷题排名就需要对力扣网站进行数据爬取,最近就对爬虫的机制和爬虫的意义进行了了解。

2.爬虫能做什么

其实爬虫的主要目标就是通过大量自动化进行目标网站的访问,获取公开的数据,方便我们进行数据 统计或者数据整合。其中公开shuju一定要注意,就是一定是网页可以公开访问的数据进行访问,否则是违法的哦,容易面向监狱编程。另外就是一定要注意访问的频次,不能对原始网站造成危害(一般都会做限制了)。不然会变成一只有毒的爬虫。

3.爬虫有什么意义

其实爬虫主要做的事情就是数据的收集,接下来就可以做数据的处理,企业可以用这些数据来进行市场分析,把握商机,就行买股票一样,有大量的历史数据我们就可以尝试去预测市场走势,押中了就是一次机会。
另外现在人工智能这么火爆,但是人工智能的基础就是大数据,我们听说过训练集其实就是大数据,我们有时候拿不到现成的数据集的时候就需要进行爬虫拿到我们的数据基础。


在这里插入图片描述

二、爬虫的实现

1.爬虫的基础原理

爬虫其实就是自动访问相应的网站,拿到我们想要的数据。比如我们想要查快递,就会不断的访问一个网页,去看最新的进度,爬虫就是去模拟这个过程,同时为了提高效率可能会省略一些步骤。我们这次就以力扣的刷题总数做例子。

2.api的获取

我们打开力扣的主页的时候一定会进行数据的访问拿到一些信息,我们打开开发者模式,就可以看到每一条请求。例如下图:
在这里插入图片描述
右侧就是我的主页其中的一条数据库请求内容,他用的语法是graphql,赶兴趣我们下次再讲,我们只要用就行了。
我们其实可以对请求头进行精简,得到下面的graphql语法:

payload = {"operation_name": "userPublicProfile",   #查询数据库请求内容"query": '''query userPublicProfile($userSlug: String!) {
userProfilePublicProfile(userSlug: $userSlug) {usernamesubmissionProgress {acTotal}
}
}
''',"variables": '{"userSlug":"查询对象"}'
}

3.爬虫实现

我们直接对上面构造的访问方式进行访问,看看得到了什么:

import requests as rq
from urllib.parse import urlencodeheaders={       #请求头信息"Referer":"https://leetcode.cn",
}payload = {"operation_name": "userPublicProfile",   #查询数据库请求内容"query": '''query userPublicProfile($userSlug: String!) {
userProfilePublicProfile(userSlug: $userSlug) {usernamesubmissionProgress {acTotal}
}
}
''',"variables": '{"userSlug":"romantic-haibty42"}'
}res = rq.post("https://leetcode.cn/graphql/"+"?"+ urlencode(payload),headers = headers)
print(res.text)

在这里插入图片描述
可以从上面的发现我们拿到了acTotal字段,也就是我们想要总的刷题数。但是我们尝试对大量数据进行访问的时候我们就会看到访问频次的限制。


三、反爬解决方案

1.反爬的实现方式

很多网站常用的一种反爬的方式是对单ip进行限制,如果一个ip在一定的时间内大量访问,那么就会不再返回信息,而是返回错误。主要是数据库的日志系统会对访问进行记录。

2.反爬的解决方法

请添加图片描述
Ipidea是一个IP代理平台,为全球用户提供优质大数据代理服务,目前拥有千万级真实住宅IP资源,包含超过220个国家和地区,日更新超过4000万,汇聚成代理服务池并提供API接入,支持http、https、socks5等多种协议类型,并且拥有API形式和账号密码多种使用方式,非常易于上手。官网地址

3.反爬的实现代码

其实我们有了上面的代码之后再加入到ipidea就会很简单,只要我们去官网下示例代码,然后插入我们的代码就行了:
在这里插入图片描述
只要我们将代码中的tiqu换成我们的提取链接,然后将我们的代码放到核心业务的try里面就可以实现了。
不过我为了使用socks5代理方式进行了修改,完整版代码如下:

# coding=utf-8
# !/usr/bin/env python
import json
import threading
import time
import requests as rq
from urllib.parse import urlencodeheaders={"Referer":"https://leetcode.cn",}payload = {"operation_name": "userPublicProfile","query": '''query userPublicProfile($userSlug: String!) {
userProfilePublicProfile(userSlug: $userSlug) {usernamesubmissionProgress {acTotal}
}
}
''',"variables": '{"userSlug":"kingley"}'
}username = "romantic-haibty42"def int_csrf(proxies,header):sess= rq.session()sess.proxies = proxiessess.head("https://leetcode.cn/graphql/")header['x-csrftoken'] = sess.cookies["csrftoken"]testUrl = 'https://api.myip.la/en?json'# 核心业务
def testPost(host, port):proxies = {'http': 'socks5://{}:{}'.format(host, port),'https': 'socks5://{}:{}'.format(host, port),}res = ""while True:try:header = headers# print(res.status_code)chaxun = payloadchaxun['variables'] = json.dumps({"userSlug" : f"{username}"})res = rq.post("https://leetcode.cn/graphql/"+"?"+ urlencode(chaxun),headers = header,proxies=proxies)print(host,res.text)except Exception as e:print(e)breakclass ThreadFactory(threading.Thread):def __init__(self, host, port):threading.Thread.__init__(self)self.host = hostself.port = portdef run(self):testPost(self.host, self.port)# 提取代理的链接  json类型的返回值 socks5方式
tiqu = ''while 1 == 1:# 每次提取10个,放入线程中resp = rq.get(url=tiqu, timeout=5)try:if resp.status_code == 200:dataBean = json.loads(resp.text)else:print("获取失败")time.sleep(1)continueexcept ValueError:print("获取失败")time.sleep(1)continueelse:# 解析json数组print("code=", dataBean)code = dataBean["code"]if code == 0:threads = []for proxy in dataBean["data"]:threads.append(ThreadFactory(proxy["ip"], proxy["port"]))for t in threads:  # 开启线程t.start()time.sleep(0.01)for t in threads:  # 阻塞线程t.join()# breakbreak

实现结果如下:
在这里插入图片描述
短时间大量访问也不会进行限制啦。

4.IPIDEA还能做什么

请添加图片描述
全局动态住宅代理
动态代理覆盖全球240+国家地区,且均为真实的家庭住宅ip,这意味着请求的成功率更好,且数据的真实性更高。
多种调用方式
支持api接口调用、账号密码调用以及插件代理,使我们的应用成本大大降低。
定制使用时效
出口IP时效可以自己设置,或者每次进行更换,可以让我们使用更加灵活。
高匿隧道
隧道中转,支持高并发,不同端口的出口为不同的ip,自动切换,让我们的信息更加安全。
完善文档支持
对于不同语言都有对应的实例文档,方便我们快速上手。


请添加图片描述

四、总结

今天我们讲了爬虫的基础知识,还能拿到力扣的刷题数据,甚至我们还利用IPIDEA逃脱了力扣的访问限制。大家快动动手指尝试一下吧。相信大家都能掌握爬虫的基本实现方式,不过要注意要注意文明的爬虫哦。
另外,相信有着安全保护等等多种功能的IPIDEA一定会对企业有很大的意义,如果你企业有这方面的烦恼,不妨试试这款神器,限制注册就送1G流量哦。官网地址


文末送书

赠送书籍:《架构基础》
赠送数量:5
赠送规则:本文三连并分享
进抽奖群:加臻哥福利小助手进群( szzdzhp002 ) 回复暗号:19

本书不涉及任何具体的编程语言,采用大量的架构图、流程图、状态图、时序图等来图解企业级架构,更加清晰直观。每个章节都以场景化案例进行剖析,从需求、问题、解决方案、原理、设计方法、落地方案等多个角度,给出架构设计方法。可以根据本书目录查找对应的场景设计,参考应用在企业系统建设中。以阿里云 / 腾讯云消息系统、支付宝 / 微信支付系统、鹰眼业务监控系统、监管批量信息报送系统作为实战案例,详细讲解架构设计过程,对核心功能、设计、数据结构加以分析,巩固读者的架构思维和设计能力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25438.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图文并茂|AIGC的浪潮下,文本生成发展得怎么样了?

来自:机器之心和澜舟科技 1 月 12 日,在机器之心 AI 科技年会 AIGC 技术应用论坛上,澜舟科技创始人兼 CEO、中国计算机学会 CCF 副理事长、创新工场首席科学家周明发表了主题演讲《文本生成研究进展》。 进NLP群—>加入NLP交流群 以下为演…

prophet

用好小模型!这里提出了名为 Prophet 的框架,通过在 LLM 上游引入一个可学习的、任务相关的视觉问答小模型,来更好地激发大模型的潜力。 用小模型启发大语言模型解决外部知识图像问答 大规模语言模型(Large Language Model&#x…

通过LLM构建聊天机器人必备技巧

聊天机器人在AI领域并不稀奇,尤其是ChatGPT问世之后,很多人都把它当成一个可以随时对话随意提问的聊天机器人。而在实际应用领域,聊天机器人的场景也愈加丰富多样。 比如很多人熟知的客服聊天机器人,常用在电商领域,能…

基于PHP的招聘网站

摘要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括在线招聘的网络应用,在外国在线招聘已经是很普遍的方式,不过国内的在线招聘可能还处于起步阶段。招聘网站具有招聘信息功能的双向选择&#xff0c…

丘仕达:SEO资料站管理团队成员招募

管理团队终于要成立了,我以为我会很兴奋或激动,奇怪的是我没有. 一直都想组团队,但我自己走了很多弯路,一直都在问自己:你能给团队成员什么利益?你能保证团队成员之间利益分配合理不冲突吗? 答案是不能.所以我一直在犹豫,给了自己一个理由:多观察下,给多点时间彼此来磨合.磨到…

如何招聘一个外贸SEO推广人员以及如何做后期的KPI考核

随着国内SEO行业的日渐成熟,越来越多的外贸公司,开始招聘专门的SEO人员,如果你去招聘网站上搜“外贸SEO”,会发现很多这样的公司。 总的来说,SEO的薪资水平还是不低的,深圳外贸行业SEO人员的平均月薪在8K以…

AI_News周刊:第三期

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 2023.02.20—2023.02.25 News 1.OpenAI 现在正在帮助可口可乐改善其营销和运营 2023 年 2 月 21 日——贝恩公司今天宣布与 OpenAI 建立全球服务联盟,OpenAI 是人工智能系统 ChatGPT、DA…

人工智能轨道交通行业周刊-第27期(2022.12.12-12.25)

本期关键词:虚拟中台、智轨、数字员工客服、钢轨光带异常、小目标检测 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨…

AI_Papers周刊:第五期

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 2023.03.06—2023.03.12 Top Papers Subjects: cs.CL 1.Larger language models do in-context learning differently 标题:更大的语言模型以不同的方式进行上下文学习 作者&#xff…

又编解码错误?一怒之下我把编解码的问题连根拔起!!!

文章目录 寻找同道问题解决专栏有哪些常用编码集?pycharm一劳永逸大法 寻找同道 运行代码的时候,最烦的就是代码逻辑都好好的,然后出现了编解码错误的报错。 我就纳闷儿了,我就做个测试,你错误就错误呗,你…

知乎高赞:Java9的模块化技术在应用上有什么价值?

点击关注公众号,利用碎片时间学习 来源:zhihu.com/question/264956573/ answer/1840974105 最近就正好在倒腾模块化,说说我们的应用场景 就是用java来写steam上的游戏,那缺省的jdk,它提供了语言常见的功能 但是 jdk并不…

知乎的彩蛋

在这篇文章中《Python一个有趣的彩蛋命令行执行python -c "import this"或者在python解释器中执行import this,会打印出Python之禅,另外介绍了个Chrome的彩蛋,在地址栏输入chrome://dino/,就可以打开一个小恐龙跑酷的黑…

设计模式看了又忘,忘了又看?

设计模式收藏这篇就够了 耗时了 5 个月,终于把设计模式一整个系列写完。其实设计模式这一系列文章网上已经有很多非常好、非常优秀的文章,为什么要写呢? 一方面是为了学得更扎实,印象中设计模式学习了 2 遍,记得牢的基…

响铃:IP跨界她经济,同道能讲好“单身婚纱”的故事吗?

文|曾响铃 来源|科技向令说(xiangling0815) 国泰君安证券报告显示,女性消费对经济增长的贡献率接近70%,到2019年中国内地女性经济市场规模近将接近4.5万亿元,而家庭消费中,近75%由女性决策。 由此引发的…

“因为内存泄漏,我的 M1 MacBook Pro 瘫痪了”

整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 上个月,苹果在宣布“王炸候场中”后,19 号发布了 AirPods 3、HomePod mini 等新品,而这场发布会真正的主角当属新款 MacBook Pro:强悍的 M1 Pro/M1 Max…

程序员的财务自由之路(五)- 三人行必有吾师

一、前言 给自己树立一个「 目标 」是非常重要的,有「 目标 」才会有「 方向 」,有「 目标 」才会有「 动力 」,有「 目标 」才会有「 人生的意义 」。有了「 目标 」,再做一定的「 规划 」,并且「 坚持 」做下去&…

浅谈脑机接口:传统神经学科的颠覆者

人类从未停止对大脑的研究,然而有关于大脑的探秘如今所发现的也仅仅只是冰山一角,作为神秘的研究领域,脑科学直到下个世纪仍是前沿科学。 早在2001年,美国《麻省理工科技评论》首次提出把脑机接口领域称为将会改变世界的10大新兴技…

程序员坐牢了,会被安排去写代码吗?

点击蓝色“程序员黄小斜”关注我哟 加个“星标”,每天和你一起多进步一点点! 今天给大家分享一篇有意思的爽文,但也是根据多年之前一个真实报道改编而来的。 本文字数较多,建议先收藏,上下班路上、带薪上厕所、浑水…

痞子衡职场经验与感悟分享 - 索引

大家好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给大家分享的是职场经验与见闻感悟。 痞子衡在嵌入式行业也摸打滚爬了不少年,有一些个人经验可以给大家参考。所谓他山之石可以攻玉,希望痞子衡的经验对大家的职场之路有所帮…

有才天下猎聘股份简称更名为“同道猎聘” 7月31日生效

7月28日晚间,有才天下猎聘(06100)发布公告,公司英文名由“Wise Talent Information Technology Co., Ltd”更改为“Tongdao Liepin Group”,中文双重外文名称已由“有才天下信息技术有限公司”更改为“同道猎聘集团”,均自2020年6…