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

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

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

相关文章

忘记mysql数据库连接密码

本次操作所有需要用到的密令行: bin>net stop mysql bin>mysqld --skip-grant-tables bin>mysql mysql>use mysql mysql>update user set passwordpassword("123456") where user"root"; mysql>flush privileges; mys…

Python 基础 函数

1:调用函数 eg:调用内置函数 abs() 求绝对值 2:定义函数 1:定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用ret…

Springmvc跨服务器文件上传报403,409错误

报403错误 Tomcat默认只读模式&#xff0c;传图片会被拒绝 解决&#xff1a;找到 Tomcat 目录---conf下---web.xml&#xff0c;打开 加入 <init-param><param-name>readonly</param-name><param-value>false</param-value> </init-param&g…

单元测试——Winfrom

一、新建单元测试项目 二、单元测试可在Service或者Repository层分别创建 三、编写好代码后可运行单元测试 转载于:https://www.cnblogs.com/772933011qq/p/10863817.html

vue报错:dependencies were not found: * element-ui in ./src/main.js * element-ui/lib/theme-chalk/inde

报错信息 These dependencies were not found: * element-ui in ./src/main.js * element-ui/lib/theme-chalk/index.css in ./src/main.js 解决方案 1、 cmd进入命令行窗口&#xff0c;切入运行的项目文件夹下 2、输入 cnpm i element-ui -S(没有装淘宝镜像的使用 npm i…

Spring的配置与使用

一、Spring的组成 其中最核心的是Core Container核心容器 二、spring框架的作用&#xff1a; 对于我目前了解的spring框架&#xff0c;其中一个作用是用来降低程序间的耦合度的&#xff0c;也就是降低程序间的依耐性。 IOC&#xff1a;inversion of control 控制反转-->即将…

新增或编辑保存时出错后,页面无法再次编辑

新增或编辑保存时出错后&#xff0c;页面无法再次编辑&#xff0c;除非关闭新增或编辑弹窗&#xff0c;重新打开新增或编辑页面&#xff0c;否则无法编辑 &#xff0c;如下图&#xff1a; 解决方案 在新增方法之前定义loading参数&#xff0c;在调用后台服务之前先使用loading…

选择日期保存后日期变成前一天(avue date)

1、问题&#xff1a;选中日期&#xff0c;保存&#xff0c;日期变成前一天 {label: 生产日期,prop: esDate,type: date,}, 2、解决&#xff1a;&#xff08;avue的官方文档&#xff09; {label: 生产日期,prop: esDate,type: date,valueFormat: yyyy-MM-dd}, 只需要加 value…

v-region 地址组件无法回显问题(选择地址保存后,打开编辑,发现刚才选择的地址【省市县乡】信息消失,信息不回显)

(Avue) 1、问题 v-region 地址组件无法回显(选择地址保存后&#xff0c;打开编辑&#xff0c;发现刚才选择的地址【省市县乡】信息消失&#xff0c;信息不回显) 选择好省市县乡后&#xff0c;保存&#xff0c;再次编辑&#xff0c;发现如下&#xff1a; 2、解决方案&#xff…

JavaScript中一个对象数组按照另一个数组排序

JavaScript中一个对象数组按照另一个数组排序 需求&#xff1a;排序 const arr1 [33, 11, 55, 22, 66];const arr2 [{age: 55}, {age: 22}, {age: 11}, {age: 66}, {age: 33}]数组arr2中每项都是一个对象&#xff0c;对象中age属性 数组arr1中的项将arr2数组根据对象的age值…

oracle mysql 常用语句(查询表中某字段有几种类型,及每种类型有多少个数、插入多行、查询前几行)

亲测有效 1、&#xff08;1&#xff09;查询表中某字段有几种类型&#xff0c;及每种类型有多少个数 select DISTINCT name user_name,count(*) num from patient GROUP BY name &#xff08;2&#xff09;查询表中某字段类型共有几种 select count(distinct name) from pat…

SQL中多表查询:左连接、右连接、内连接、全连接、交叉连接

一、左连接&#xff0c;右连接&#xff0c;内连接关系 左连接&#xff1a;左表全部两个表交集&#xff08;①②&#xff09; 右连接&#xff1a;右表全部两个表交集&#xff08;③②&#xff09; 内连接&#xff1a;两个表交集&#xff08;②&#xff09; 二、结合具体例子看…

ORA-00972: identifier is too long问题解决

报错 解决&#xff1a; 查看你写的是否有中文 如果有中文&#xff0c;看是否有引号将中文引起来&#xff0c;用引号引起来后不报错

Alter操作(修改列名,修改列数据类型,增加列,删除列,增加列且设为主键及对默认值操作)

一、mysql &#xff08;增加列&#xff0c;删除列&#xff0c;修改列&#xff1b;增加&#xff0c;删除&#xff0c;修改列的默认值&#xff09; 增加列&#xff0c;删除列&#xff0c;修改列 1、修改列的数据类型 alter table patient modify column mood int2、修改列名 …

马蜂窝推荐系统容灾缓存服务的设计与实现

数据库突然断开连接、第三方接口迟迟不返回结果、高峰期网络发生抖动...... 当程序突发异常时&#xff0c;我们的应用可以告诉调用方或者用户「对不起&#xff0c;服务器出了点问题」&#xff1b;或者找到更好的方式&#xff0c;达到提升用户体验的目的。 一、背景 用户在马蜂窝…

Vivado Bit文件压缩

前言 Vivado编译生成的Bit文件太大&#xff0c;想要小一点该咋办呢&#xff1f;那么就需要给bit文件瘦身。 流程 直接在约束文件xdc中添加下述语句即可&#xff1a; set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 未压缩前 压缩后 根据工程不同&#xff0c;还…

Mac安装webpack报错gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1解决

安装webpack &#xff0c;报错提示 gyp ERR! configure error gyp ERR! stack Error: gyp failed with exit code: 1 gyp ERR! stack at ChildProcess.onCpExit (/usr/local/lib/node_modules/cnpm/node_modules/node-gyp/lib/configure.js:345:16) gyp ERR! stack a…

箭头函数用法

1.基本使用 2.参数和返回值 函数里只有一行代码 log没有返回值&#xff0c;所以是undefined 结果为 Hello Demo undefined 箭头函数&#xff1a; 在函数作为另外一个函数参数的时候&#xff0c;适合用箭头函数 3.箭头函数的this 返回值都是window 返回值&#xff0c;一…

云计算值得学习吗?云计算开发技术与应用未来工作前景

云计算技术的工作前景本人非常看好&#xff0c;其实已经不是我自己看好的事了&#xff0c;而是现在本来就已经很好很火了&#xff0c;在云计算的基础上又存生出大量其他产业链&#xff0c;归根结底还是云计算是前有技术的综合体&#xff0c;一会儿总结&#xff0c;那么工作前景…

路由的导航守卫

全局导航守卫 打印一下to&#xff0c;看是啥 meta 元数据&#xff08;描述数据的数据&#xff09; 3、路由独享的守卫 保留状态 keep-alive 保持组件不要频繁进行创建和销毁 activated deactivated 只有被保存了状态&#xff0c;使用了keep-alive时才起作用 和正则…