Loading... # python 爬虫学习 ## 爬虫 通过编写程序,模拟浏览器上网,抓去数据 ### 分类 * 通用爬虫:抓取系统重要的组成部分,抓取的是整张页面的数据 * 聚焦爬虫:建立在通用爬虫的基础之上,抓取的是页面的特定局部内容 * 增量式爬虫:检测网站中数据更新的情况,只会抓取更新的数据 ### 反爬机制 门户网站可以通过制定相关策略或者技术手段,防止爬虫程序进行网站数据的爬取 ### 反反爬策略 爬虫程序指定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而获取门户网站中的相关数据 ## http协议 概念:服务器和客户端进行数据交互的一种形式 ### 常见请求头 User-Agent:请求载体的身份标识 Connection:请求完毕后,是否断开还是保持连接 ### 常见响应头 Content-type:服务器响应回客户端的数据类型 http协议:安全的超文本传输协议 ### 加密方式 * 对称密钥加密: 双方共同持有密钥,发送方用这个密钥按照指定的算法将数据加密,再发送出去,接收方使用密钥将其解密 缺点是传输过程中密钥可能被拦截用来解密 * 非对称密钥加密: 一对密钥,分为公钥和私钥,发送方使用公钥将数据加密,发送出去,接收方使用私钥将数据进行解密,好处是就算拦截也只能截到公钥和密文,没有私钥很难解密 缺点是公钥可能被篡改劫持,且传输效率较低 * **证书密钥加密**: 在非对称密钥加密基础上,在公钥传输过程中添加了证书认证机构,对传输的公钥进行审核,确认无误后才可发送给接收端,并进行解密 ## requests模块 python中基于网络请求的模块,功能强大,简单便捷,效率极高 模拟浏览器发送请求 使用过程 * 指定url * 发起请求 * 获取响应数据 * 持久化存储 eg ~~~python import requests url = 'https://cn.bing.com/' response = requests.get(url=url) page_text = response.text print(page_text) ~~~ ### UA 伪装 门户网站的服务器会检测对应请求的载体身份标识,若检测到请求载体身份标识为浏览器,说明为正常请求服务器端很可能拒绝请求,故让爬虫伪装成一款浏览器 将User-Agent信息封装到一个字典中 eg ~~~python import requests url = 'https://cn.bing.com/search' # 输入参数 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62' } search = input("Please input your query:") param = { 'q': search } response = requests.get(url=url, params=param, headers=headers) # 带入参数 page_text = response.text fileName = search + '.html' with open(fileName, 'w', encoding='utf-8') as fp: fp.write(page_text) print('success!') ~~~ ### post方式爬取 百度翻译页面查单词 ~~~python import json import requests post_url = 'https://fanyi.baidu.com/sug' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 ' 'Safari/537.36 Edg/96.0.1054.62' } query = input('Please input the word:') data = { 'kw': query } response = requests.post(url=post_url, data=data, headers=headers) dic_obj = response.json() print(dic_obj) fp = open('./dog.json', 'w', encoding='utf-8') json.dump(dic_obj, fp=fp, ensure_ascii=False) print('success!') ~~~ ### 获取json形式的数据 ~~~python import json import jsonpath as jsonpath import requests url = 'https://movie.douban.com/j/chart/top_list' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 ' 'Safari/537.36 Edg/96.0.1054.62' } params = { 'type': '24', 'interval_id': '100:90', 'action': '', 'start': '0', 'limit': '20' } response = requests.get(url=url, params=params, headers=headers) list_data = response.json() fp = open('./douban.json', 'w', encoding='utf-8') json.dump(list_data, fp=fp, ensure_ascii=False, indent=2) # ensure_ascii保证输出中文,最后1个参数设置缩进来格式化json数据 print('success!') title_list = jsonpath.jsonpath(list_data, '$..title') cnt = 0 for i in title_list: cnt += 1 print(str(cnt) + '.' + i) ~~~ 最后修改:2022 年 12 月 29 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏