爬虫系统学习
================================requests=====================================
详细了解一下爬虫
#1爬虫究竟是合法还是违法的? # 在法律上不被禁止 算是中立性 # 2爬虫所带来风险主要体现在以下2个方面: # 爬虫干扰了被访问网站的正常运营; # 爬虫抓取了受到法律保护的特定类型的数据或信息。 # 爬虫的分类 # 通用爬虫:通用爬虫是搜索引擎(Baidu、Google、Yahoo等)“抓取系统”的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 简单来讲就是尽可能的;把互联网上的所有的网页下载下来,放到本地服务器里形成备分,在对这些网页做相关处理(提取关键字、去掉广告),最后提供一个用户检索接口。 # 聚焦爬虫:聚焦爬虫是根据指定的需求抓取网络上指定的数据。例如:获取豆瓣上电影的名称和影评,而不是获取整张页面中所有的数据值。 # 增量式爬虫:增量式是用来检测网站数据更新的情况,且可以将网站更新的数据进行爬取(后期会有章节单独对其展开详细的讲解)。 # 反爬机制 # 反反爬策略 # robots协议: # 几乎是和爬虫技术诞生的同一时刻,反爬虫技术也诞生了。在90年代开始有搜索引擎网站利用爬虫技术抓取网站时,一些搜索引擎从业者和网站站长通过邮件讨论定下了一项“君子协议”—— robots.txt。即网站有权规定网站中哪些内容可以被爬虫抓取,哪些内容不可以被爬虫抓取。这样既可以保护隐私和敏感信息,又可以被搜索引擎收录、增加流量。 # # 历史上第一桩关于爬虫的官司诞生在2000年,eBay将一家聚合价格信息的比价网站BE告上了法庭,eBay声称自己已经将哪些信息不能抓取写进了robots协议中,但BE违反了这一协议。但BE认为eBay上的内容属于用户集体贡献而不归用户所有,爬虫协议不能用作法律参考。最后经过业内反复讨论和法庭上的几轮唇枪舌战,最终以eBay胜诉告终,也开了用爬虫robots协议作为主要参考的先河。 # # 最后,可以通过网站域名 + /robots.txt的形式访问该网站的协议详情,例如:www.taobao.com/robots.txt # HTTP协议: # 常见的请求头信息 # accept:浏览器通过这个头告诉服务器,它所支持的数据类型 # Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集 # Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式 # Accept-Language:浏览器通过这个头告诉服务器,它的语言环境 # Host:浏览器通过这个头告诉服务器,想访问哪台主机 # If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间 # Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链 # Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接 # X-Requested-With: XMLHttpRequest 代表通过ajax方式进行访问 # User-Agent:请求载体的身份标识 # # 常见的响应头信息 # Location: 服务器通过这个头,来告诉浏览器跳到哪里 # Server:服务器通过这个头,告诉浏览器服务器的型号 # Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式 # Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度 # Content-Language: 服务器通过这个头,告诉浏览器语言环境 # Content-Type:服务器通过这个头,告诉浏览器回送数据的类型 # Refresh:服务器通过这个头,告诉浏览器定时刷新 # Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据 # Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的 # Expires: -1 控制浏览器不要缓存 # Cache-Control: no-cache # Pragma: no-cache # https协议=http+加密 # # 对称秘钥加密 1.0 # 非对称秘钥加密 2.0 # 证书秘钥加密 3.0
第一个实例:动态访问百度搜索
import requests # UA伪装 headers = { 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'en-US,en;q=0.8', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Referer': 'http://www.baidu.com/', 'Connection': 'keep-alive', } url = "https://www.baidu.com/s?" wd = input("输入关键字。。。") param = { "wd":wd } res = requests.get(url,param,headers=headers) with open("a.html","w",encoding="utf-8")as f: f.write(res.text)
第二个实例:访问百度翻译:
这个有点疑问,我去抓包,看不到sub 看到的链接访问不成功,不知道为啥,还未解决。
url = "https://fanyi.baidu.com/sug" # url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en" kw = input("输入需要翻译的词语。。。") data = { "kw": kw } res = requests.post(url,data=data,headers=headers).json() print(res) #总结一下,支持词语,英译汉 汉译英 别的没测试 不支持句子 # #
如何获取动态加载的数据:
自己用抓包工具,自己去看,自己去找,自己去分析
================================数据解析=====================================
1.正则------>跳转
2.bs4------>跳转
3.xpath---->跳转
================================验证码识别=====================================
超级鹰
================================防止IP被封=====================================
快代理 西祠代理 www.goubanjia.com #我没测试成功 import requests import random if __name__ == "__main__": #不同浏览器的UA header_list = [ # 遨游 {"user-agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)"}, # 火狐 {"user-agent": "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"}, # 谷歌 { "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"} ] #不同的代理IP proxy_list = [ {"http": "112.115.57.20:3128"}, {'http': '121.41.171.223:3128'} ] #随机获取UA和代理IP header = random.choice(header_list) proxy = random.choice(proxy_list) url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip' #参数3:设置代理 response = requests.get(url=url,headers=header,proxies=proxy) response.encoding = 'utf-8' with open('daili.html', 'wb') as fp: fp.write(response.content)
================================进程线程池异步===============================
================================协程异步=====================================
================================爬虫自动化=====================================
================================框架==================================
-----------------------------------------------------------------------------------------------------------------------------------------