python网络爬虫基础day01
2019.5.13,今天在“小猿圈”跟着波波老师学习了爬虫开发的第一章和第二章,总结下今天学的知识:
爬虫基础介绍:
什么是爬虫? - 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。 爬虫的价值: - 实际应用 - 就业 爬虫究竟是合法还是违法的? - 在法律中不被禁止 - 具有违法风险 - 善意爬虫 恶意爬虫 爬虫带来的风险可以体现在如下两个方面: - 爬虫干扰了被访问网站的正常运营 - 爬虫抓取了受到法律保护的特定类型的数据或信息 如何在使用编写爬虫的过程中避免进入局子的厄运呢? - 时常优化自己的程序,避免干扰被访问网站的正常运行 - 在使用,在使用,传播爬取到的数据时,审查抓取到的内容,如果发现了设计到用户 隐私商业机密等敏感内容需要及时停止爬取或传播 爬虫在使用场景中的分类: - 通用爬虫: 抓取系统重要组成部分。抓取的是一整张页面数据。 - 聚焦爬虫: 是建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容。 - 增量式爬虫: 检测网站中数据更新的情况,只会抓取网站中更新出来的数据。 爬虫的矛与盾 反爬机制 - 门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。 反反爬策略 - 爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制, 从而可以获取门户网站的数据 robots.txt协议: - 君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取 http协议 - 概念:就是服务器和客户端进行数据交互的一种形式。 常用请求头信息 - User-Agent:请求载体的身份标识 - Connection:请求完毕后,是断开连接还是保持连接 常用响应头信息 - Content-Type:服务器响应回客户端的数据类型 https协议: - 安全的超文本传输协议 加密方式 - 对称密钥加密 发送方将密钥通过网络传输给接收方 - 非对称密钥加密 发送方创建密钥对,对文件用公钥进行加密,将公钥传输给接收方,用密钥对和私钥解密 - 证书密钥加密 对公钥进行数字签名,将公钥和证书绑定在一起发送给接收方 requests模块基础:
requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。 作用:模拟浏览器发请求。 如何使用:(requests模块的编码流程) - 指定urL发起请求 - 获取响应数据 - 持久化存储 环境安装: - pip install requests - 也可以在pycharm中:Settings --> Project --> Project Interpreter --> "+" 添加requests
实战编码: - 需求:爬取搜狗首页的页面数据 实战巩固 - 需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器) - UA检测 - UA伪装 - 需求:破解百度翻译 - post请求(携带了参数) - 响应数据是一组json数据(如何确认?) 打开页面 --> F12 --> Network --> Headers --> Response Headers --> Content-Type --> application/json - 需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据 - 打开页面 --> F12 --> 滑动混轮,出现新的Name --> 查看Headers信息 --> 用的是get()方法 --> 下拉到底端 --> 找到应该配置的参数后写入字典 --> 将字典参数传到get()方法的形参params中 - 需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数 - 需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据 http://125.35.6.84:81/xk/
1 # Author:K 2 # 需求:爬取搜狗首页的页面数据 3 4 import requests 5 6 # step 1:指定url 7 url = 'https://www.sogou.com/' 8 9 # step 2:发起请求 10 response = requests.get(url = url) # get()方法会返回一个相应对象 11 12 # step 3:获取响应数据: 13 page_text = response.text # text方法返回的是字符串形式的相应数据 14 print(page_text) 15 16 # step 4:持久化存储 17 with open('./sogou.html','w',encoding='utf-8') as fp: 18 fp.write(page_text) 19 20 print("爬取数据结束!")
爬取搜狗首页
1 # Author:K 2 import requests 3 4 # UA伪装: 5 headers = { 6 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36" 7 } 8 9 keyword = input("Please input keyword:") 10 url = 'https://www.sogou.com/web?' 11 12 # 参数设置: 13 params = { 14 'query':keyword 15 } 16 17 response = requests.get(url = url,params = params,headers = headers) 18 19 data = response.text 20 21 fileName = keyword + '.html' 22 with open(fileName,'w',encoding='utf-8') as fp: 23 fp.write(data) 24 25 print("爬取结束!")
简易网页采集器
1 # Author:K 2 3 import requests 4 import json 5 6 url = 'https://fanyi.baidu.com/sug' 7 8 headers = { 9 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36" 10 } 11 12 kw = input("Please input keyword:") 13 data = { 14 'kw':kw 15 } 16 17 response = requests.post(url = url,data = data,headers = headers) 18 19 dic_obj = response.json() # 要确定服务器响应的son数据才能使用此方法 20 21 # 存储到本地 22 fileName = kw + '.json' 23 fp = open(fileName,'w',encoding='utf-8') 24 json.dump(dic_obj,fp = fp,ensure_ascii=False) # json文件中有中文,不能使用ascii编码 25 26 print("爬取结束!")
破解百度翻译
1 # Author:K 2 import requests 3 import json 4 5 url = 'https://movie.douban.com/j/chart/top_list' 6 7 start_movie = input("Please input number that which movie you want to choose first:") 8 limit_movie = input("Please input number that how many movie one time display:") 9 10 params = { 11 "type": "5", 12 "interval_id": "100:90", 13 "action": "", 14 "start": start_movie, # 从第几部电影开始取 15 "limit": limit_movie, # 一次取多少部 16 } 17 18 headers = { 19 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36" 20 } 21 22 response = requests.get(url = url,params = params,headers = headers) 23 24 list_obj = response.json() 25 26 fileName = "doubanMovie.json" 27 fp = open(fileName,'w',encoding = 'utf-8') 28 json.dump(list_obj,fp = fp,ensure_ascii = False) 29 30 print("Successful crawling!")
豆瓣电影爬取
1 # Author:K 2 #--------------------------为什么查询不出来???? 3 import requests 4 5 url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' 6 7 headers = { 8 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36" 9 } 10 11 #kw = input("Please input keyword:") 12 page_index = input("Which page you want to choose first:") 13 page_size = input("The pageSize is:") 14 15 data = { 16 "cname": " ", 17 "pid": " ", 18 "keyword": "北京", 19 "pageIndex": page_index, 20 "pageSize": page_size, 21 } 22 23 response = requests.post(url = url,data = data,headers = headers) 24 page_text = response.json() 25 print(page_text) 26 fileName = "KFC restaurant.txt" 27 with open(fileName,'w',encoding = 'utf-8') as fp: 28 fp.write(str(page_text)) 29 30 print("Successful crawling!")
肯德基餐厅查询(未解决)
1 # Author:K 2 import requests 3 import json 4 5 url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' 6 7 headers = { 8 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36" 9 } 10 11 all_data_list = [] # 存储企业详情数据 12 id_list = [] # 存储企业对应的id 13 14 for page in range(1,5): # !!!!!!!!!!!!为什么这里范围大了就不行????????? 15 data = { 16 "on": " true", 17 "page": str(page), 18 "pageSize": " 15", 19 "productName": " ", 20 "conditionType": " 1", 21 "applyname": " ", 22 "applysn": " ", 23 } 24 25 dic_info = requests.post(url = url,data = data,headers = headers).json() 26 27 for dic in dic_info["list"]: 28 id_list.append(dic["ID"]) 29 30 info_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById' 31 for id in id_list: 32 id_data = { 33 "id":id 34 } 35 36 info_response = requests.post(url = info_url,data = id_data,headers = headers) 37 dic_data = info_response.json() 38 all_data_list.append(dic_data) 39 40 # 持久化存储 41 fileName_data = "data.json" 42 fp = open(fileName_data,'w',encoding = 'utf-8') 43 json.dump(all_data_list,fp = fp,ensure_ascii = False) 44 45 print(len(all_data_list)) 46 print("successful crawling!")
药监总局(未解决)
其中肯德基餐厅查询和药监总局这两个案例未解决。后续在补充!
转载于:https://www.cnblogs.com/KisInfinite/p/10859792.html
python网络爬虫基础day01相关推荐
- Python网络爬虫第一课----Python网络爬虫基础《http和https协议》
Python网络爬虫第一课----Python网络爬虫基础<http和https协议> 一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protoc ...
- python网络爬虫基础知识_Python网络爬虫基础知识
一.网络爬虫 网络爬虫又被称为网络蜘蛛,我们可以把互联网想象成一个蜘蛛网,每一个网站都是一个节点,我们可以使用一只蜘蛛去各个网页抓取我们想要 的资源.举一个最简单的例子,你在百度和谷歌中输入'Pyth ...
- Python网络爬虫基础
目录 目录 一.HTML基础 1.HTML相关概念&发展历史 1.1HTML及相关概念的介绍 1.2HTML发展历史 编辑2.WEB标准.W3C/ECMA相关概念 2.1WEB标准的概念及组 ...
- Python 网络爬虫基础知识及体验
概述 大佬都说我们已经从 IT 时代进入了 DT 时代,大数据已经深刻地影响人类社会,改变着我们的工作和生活.不知道谁说的:大数据是21世纪最重要的经济资源,未来最大的能源不是石油而是大数据! 虽然听 ...
- Python网络爬虫基础进阶到实战教程
文章目录 认识网络爬虫 HTML页面组成 Requests模块get请求与实战 效果图 代码解析 Post请求与实战 代码解析 发送JSON格式的POST请求 使用代理服务器发送POST请求 发送带文 ...
- Python进阶--网络爬虫基础
Python网络爬虫基础 一.网络请求 ProxyHandler处理器(代理): request库 发送get请求: 发送post请求: 使用代理 requests 处理cookie 信息.处理不信任 ...
- python网络爬虫的基本步骤-python爬虫入门需要哪些基础/python 网络爬虫教程
如何入门 Python 爬虫 入门个吊,放弃 python爬虫入门需要哪些基础 现在之所以有多的小伙伴热衷于爬虫技术,无外乎是因为爬我们做很多事情,比如搜索引擎.采集数据.广告过滤等,以Python为 ...
- python网络爬虫权威指南 豆瓣_福利分享:个人整理的Python书单,从基础到进阶...
原标题:福利分享:个人整理的Python书单,从基础到进阶 我挑选的一些书籍,大家可以自行到书店或是网上自己选购.也由于个人水平有限,很可能大家觉得优秀的书籍没有列出,如果大家有觉得不错的书籍,欢迎大 ...
- python基础代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)
WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...
最新文章
- Clion从入门到精通
- vue点击定位到指定位置_百度地图vue-baidu-map自动定位,鼠标选点并进行逆解析,地区检索,使用案列以及解决方案...
- IMXRT 分散加载文件 修改OCRAM,DTCM、ITCM大小
- 深入理解JVM之前端编译器(一)
- js如何判断当前页面是否处于激活状态
- zabbix查看数据
- OpenCV检测ArUco标记
- 复习上学期的HTML+CSS(1)
- excel随机排序,在A列产生顺序号
- LINUX下的APACHE的配置
- apigee 安装_APIGEE – API网关简介
- C++/C--mmap()详解
- ssm练手小项目_20 个 JavaScript+Html+CSS 练手的小项目
- NAnt0.92版本首次在windows 8.1的机子上运行报错的问题解决
- SecureCRT 绝佳配色方案
- linux redis 调优,关于redis状态监控和性能调优详解
- GSM/GPRS模组硬件电源设计指南
- java 科学计数法转换为普通数字_如何将计算器上的科学记数法转换为普通记数法?...
- 最成熟的网格化系统及支撑平台
- AndServer浅显使用
热门文章
- 15 - java 继承
- java 过滤脚本_【快学SpringBoot】过滤XSS脚本攻击(包括json格式)
- 使用动态代理解决网站字符集编码问题:(之前通过拦截器)
- javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)
- lwip网络通信socket_lwIP在Socket模式下接口:BSD Socket API
- wsld2java axis_Weblogic+axis2安装
- html 页面怎么加载富文本,UILabel加载html富文本
- Linux ct获取本机ip,linux ip命令
- sap 一代增强_在SAP故乡,感受“边缘智能”之变
- mysql视图存储_Mysql 视图、存储过程以及权限控制