爬虫及其合法性

什么是爬虫:

  • 通过编写程序,模拟浏览器上网,让其去互联网上抓取数据的过程。

爬虫的合法性:

  • 在法律中是不被禁止的
  • 具有违法风险

爬虫带来的风险体现在如下 2 方面:

  1. 爬虫干扰了被访问网站的正常运营
  2. 爬取到了受到法律保护的特定类型的数据和信息

如何避免法律风险:

  1. 时常优化自己的程序,避免干扰网站的正常运行。
  2. 在使用,传播爬取到的数据时,审查抓取的内容。如果发现了涉及到用户信息,商业机密,… 等敏感内容时,要及时停止爬取或传播/

爬虫在使用场景中的分类:

  • 通用爬虫:

    抓取系统重要组成部分。抓取的是一整张页面

  • 聚焦爬虫:

    建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容。

  • 增量式爬虫:

    监测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。

爬虫中的矛与盾

反扒机制

  • 门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。

反 反扒机制

  • 爬虫程序也可以通过制定相应的策略或者技术手段,破解对应网站中具备的反扒机制,从而获取到网站中的数据。

robots.txt 协议

  • 君子协议。规定了那些数据可以被爬虫爬取那些数据不可以被爬取。
  • 一般在 网站主域名后面 增加路由 robots.txt,可以查看。

Http/Https 协议

Http 协议概念

  • 是服务器与客户端进行数据交互的一种方式。

常用请求头信息

  • user-agent: 请求载体的身份标识。
  • Connection : 请求完毕后,是断开连接,还是保持连接

常用响应头信息

  • Content-Type :服务器响应回客户端的数据类型

Https 协议

  • 安全的超文本传输协议

常用加密方式:

  • 对称密钥加密:
  • 非对称密钥加密
  • 证书密钥加密( Https )

requests 模块

是: Python 中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。

使用流程

  • 指定 url
  • 发起请求
  • 获取响应数据
  • 处理响应数据

UA 伪装

UA: User-Agent 请求载体的身份标识

UA 检测:门户网站的服务器会检测对应请求的身份标识,如果检测到的载体身份标识为某一款浏览器,说明该请求是一个正常的请求。

如果检测到不是基于某一款浏览器的,则表示该请求为不正常的请求(爬虫),服务器很可能拒绝此次请求。

UA 伪装:让爬虫对应载体的身份标识伪装成某一款浏览器。

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, '
                  'like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 '
}

url = 'https://www.sogou.com/web'
response = requests.get(url, params={'query': 'key',}, headers=headers)

简单实战(发送请求...)

爬取搜狗指定词条对应的搜索结果页面(网页采集

# 爬取搜狗指定词条对应的搜索结果页面: 
# UA 伪装
import requests

if __name__ == '__main__':

    url = 'https://www.sogou.com/web'

    # UA 伪装
    headers = {
        'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, '
                      'like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 '
    }

    query = input('请输入搜索关键词: ')
    param = {
        'query': query,
    }

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

    file_name = query+'.html'
    with open(f'./response/{file_name}', 'w', encoding="utf-8") as fp:
        fp.write(page_text)
    print('.........')

爬取百度翻译

# 爬取百度翻译结果
# post 请求

import json
import requests

if __name__ == '__main__':
    url = 'https://fanyi.baidu.com/sug'

    headers = {
        'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, '
                      'like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 '
    }
    query = input('请输入需要翻译的词: ')
    data = {
        'kw': query
    }
    response = requests.post(url, data=data, headers=headers)

    # print(response.text)
    # 确认服务器返回的对象为 json
    dict_obj = response.json()
    file_name = query + '.json'
    with open(f'./response/{file_name}', 'w', encoding="utf-8") as fp:
        json.dump(dict_obj, fp=fp, ensure_ascii=False)

    print('.........')

爬取豆瓣电影分类排行, 中的电影详情数据

主要思路为,通过抓包工具获得 网站页面下拉到底发送 ajax 请求(获得下一页)的路由信息。通过 request 模拟此请求。

爬取肯德基餐厅查询,指定地点周围的餐厅数据

http://www.kfc.com.cn/kfccda/storelist/index.aspx

爬取化妆品生产许可证 的相关数据。

#  爬取化妆品生产许可证网站 的相关企业数据。

import json
import requests

# 全部企业的简略信息,包含 ID
url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
# 根据 id查询企业详细信息
itemUrl = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'

if __name__ == '__main__':

    headers = {
        'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, '
                      'like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 '
    }

    item_list = []
    for i in range(1, 6):
        data = {
            'on': True,
            'page': i,
            'pageSize': 15,
            'conditionType': 1,
        }

        dict_obj = requests.post(url, data=data, headers=headers).json()
        # 获取企业 id,得到单个企业信息
        for item in dict_obj['list']:
            item_list.append(requests.post(itemUrl, data={'id': item['ID']}, headers=headers).json())

    file_name = 'all_item' + '.json'
    with open(f'./response/{file_name}', 'w', encoding="utf-8") as fp:
        json.dump(item_list, fp=fp, ensure_ascii=False)

    print('.........')

We are all in the gutter, but some of us are looking at the stars.
我们都处在环境极差之地,但有人的目光在上空的星星。


相关推荐:

来自系列:Python 爬虫学习笔记

分类 python下文章:

1.1 数据解析的三种方式。正则表达式, bs4, xpath

2.0 多任务(进程,协程,线程)爬虫:验证码识别,返回头储存,ip代理 介绍。 异步是什么,爬虫异步的方式。线程,进程,介绍

2.0.1 协程的 async/await 实现 爬虫 单线程 + 异步协程的实现

3.0 基于selenium 模块的 爬虫操作。 selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

更多...

aid 加一试试->

评论([[comments.sum]])

发表

加载更多([[item.son.length - 2]])...

发表

2020-11 By Hchuan.

flask & bootstrap-flask

© 2021 HChuan. All rights reserved.

随机占位图来自:fghrsh

互联网ICP备案号:蜀ICP备2020031846号