码迷,mamicode.com
首页 > 其他好文 > 详细

爬虫第一章

时间:2019-06-11 22:25:22      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:params   art   com   技术   认证   write   sts   form data   内容   

爬虫基础

什么是爬虫?

爬虫是通过程序模拟浏览器上网,从网上获取数据的过程.

爬虫的分类:

  通用爬虫:爬取一整个页面的数据.

  聚焦爬虫:爬取页面中指定的局部数据

  增量式爬虫:检测网站中数据更新的情况,爬取的是网站中最新更新出来的数据.

什么是反爬机制?

  网站制作时设置的一系列阻止爬虫程序进行的阻碍,就是反爬机制,反爬机制针对的是爬虫代码.

什么是反反爬机制?

  解决反爬机制所使用的策略,反反爬机制针对的是网站.

第一个反爬机制:robots.txt协议

requests模块的应用

requests: 

功能强大,操作简单

编码流程:(可以理解成去网页查找东西一样)

  1.获取url(找到对应的网站)

  2.发送请求(回车)

  3.获取响应数据(页面返回给你的数据)

  4.持久化存储(将页面返回给你的数据保存到指定位置)

例如:爬取搜狗首页源码数据

import requests

msg=input(请输入你要搜索的内容:)
url = https://www.sogou.com/

#参数从网页中的form_data中复制过来即可
params={
    query:msg
    }

headers = {
    User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
}

response=requests.get(url=url,headers=headers,params=params)
page_text=response.text
print(page_text)

User-Agent: 请求载体的身份标识
UA检测:门户网站的服务器会检测每一个请求发送过来的UA,如果检测到是爬虫程序,则请求发送失败.
UA伪装:
  即在代码中加入User-Agent即可.

爬取肯德基所有上海餐厅的位置

import requests

#爬取肯德基所有上海位置的信息
url=http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword
for i in range(1,5):
  #data中的数据是从网站中的form data中复制过来的 data
={ cname: ‘‘, pid: ‘‘, keyword: 上海, pageIndex: i, pageSize: 10 } headers={ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 }    #判断请求方式 response=requests.post(url=url,data=data,headers=headers) page_info=response.json() file=open(./kfc.txt,a+,encoding=utf-8)
   #保存数据
for one_info in page_info[Table1]: file.write(one_info[addressDetail]+\n) file.close()

技术图片

爬取豆瓣电影的电影详情数据

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/74.0.3729.169 Safari/537.36
            }

params={
        "type": "5",
        "interval_id": "100:90",
        "action": "",
        "start": 1,
        "limit": 20,
        }
#判断请求方式
response=requests.get(url=url,params=params,headers=headers)

page_text=response.json()

动态加载的页面数据分析:

     1.我们通过请求发现,所有的企业数据都是通过动态加载出来的

  2.通过抓包工具不过动态加载数据对应的数据包

  3.从上一步获取的数据包中提取出企业的相关信息

  4.通过分析每一家详情页的url,所有的详情页的url的域名都是相同的,只是id不同

  5.在分析详情页中的数据都是通过动态加载出来的,所以这里还是需要抓包工具来对数据进行捕获.

  6.可以通过固定的url地址和不同的id进行拼接成企业详情页对应的url.

  7.通过对url进行发送请求就可以获取到企业相关的数据了.

 爬取药监总局相关的数据http://125.35.6.84:81/xk/

import requests

url=http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
headers={
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36,
}
for i in range(1,330):
    data={
        on: true,
        page: i,
        pageSize: 15,
        productName: ‘‘,
        conditionType: 1,
        applyname: ‘‘,
        applysn: ‘‘,
    }

    response=requests.post(url=url,headers=headers,data=data)
    page_info=response.json()
    page_list=[]
    for one_info in page_info[list]:
        detail_id=one_info[ID]
        detail_url=http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
        data={
            id: detail_id
        }
        detail_info=requests.post(url=detail_url,headers=headers,data=data).json()
        page_list.append(detail_info)
    fp=open(./HZP.txt,a+,encoding=utf-8)
    for one_hzp in page_list:
        fp.write(one_hzp[epsName]+ +one_hzp[businessPerson]+\n)

    fp.close()

urllib(个人感觉只要返回的形式是2进制流,他都可以返回)

from urllib import request
url=https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1560235823355&di=4f6c6ad96539247edda08e7ad09f0dee&imgtype=0&src=http%3A%2F%2Fgss0.baidu.com%2F-fo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2Fadaf2edda3cc7cd9e3670adb3901213fb80e916d.jpg

response=request.urlretrieve(url=url,filename=./晓.jpg)

http协议和https协议

  什么是http协议:客户端和服务端进行数据交互的形式

  什么是https协议: 安全的http协议,对传输的数据进行加密

    对称秘钥加密(有弊端): 把秘钥和数据一起传送过去

    非对称秘钥加密(有弊端): 服务端先发送秘钥,然后客户端按照秘钥形式进行加密,发送过去之后再通过秘钥进行解密

    证书秘钥加密(现在普遍应用):服务端先将公开秘钥发送给一个权威的认证机构,认证通过之后给秘钥做标识,然后拿到权威的证书,校验通过之后,客户端通过证书进行加密,服务端通过证书进行解密.

技术图片

 

  

 

爬虫第一章

标签:params   art   com   技术   认证   write   sts   form data   内容   

原文地址:https://www.cnblogs.com/zty1304368100/p/11006238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!