爬虫系统学习

================================requests=====================================

详细了解一下爬虫

#1爬虫究竟是合法还是违法的?
    # 在法律上不被禁止  算是中立性

# 2爬虫所带来风险主要体现在以下2个方面:
    # 爬虫干扰了被访问网站的正常运营;
    # 爬虫抓取了受到法律保护的特定类型的数据或信息。

# 爬虫的分类
# 通用爬虫:通用爬虫是搜索引擎(Baidu、Google、Yahoo等)“抓取系统”的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 简单来讲就是尽可能的;把互联网上的所有的网页下载下来,放到本地服务器里形成备分,在对这些网页做相关处理(提取关键字、去掉广告),最后提供一个用户检索接口。
# 聚焦爬虫:聚焦爬虫是根据指定的需求抓取网络上指定的数据。例如:获取豆瓣上电影的名称和影评,而不是获取整张页面中所有的数据值。
# 增量式爬虫:增量式是用来检测网站数据更新的情况,且可以将网站更新的数据进行爬取(后期会有章节单独对其展开详细的讲解)。


# 反爬机制
# 反反爬策略
# robots协议:
# 几乎是和爬虫技术诞生的同一时刻,反爬虫技术也诞生了。在90年代开始有搜索引擎网站利用爬虫技术抓取网站时,一些搜索引擎从业者和网站站长通过邮件讨论定下了一项“君子协议”—— robots.txt。即网站有权规定网站中哪些内容可以被爬虫抓取,哪些内容不可以被爬虫抓取。这样既可以保护隐私和敏感信息,又可以被搜索引擎收录、增加流量。
#
# 历史上第一桩关于爬虫的官司诞生在2000年,eBay将一家聚合价格信息的比价网站BE告上了法庭,eBay声称自己已经将哪些信息不能抓取写进了robots协议中,但BE违反了这一协议。但BE认为eBay上的内容属于用户集体贡献而不归用户所有,爬虫协议不能用作法律参考。最后经过业内反复讨论和法庭上的几轮唇枪舌战,最终以eBay胜诉告终,也开了用爬虫robots协议作为主要参考的先河。
#
# 最后,可以通过网站域名 + /robots.txt的形式访问该网站的协议详情,例如:www.taobao.com/robots.txt



# HTTP协议:
# 常见的请求头信息
#              accept:浏览器通过这个头告诉服务器,它所支持的数据类型
#         Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
#         Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
#         Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
#         Host:浏览器通过这个头告诉服务器,想访问哪台主机
#         If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
#         Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链
#         Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接
#         X-Requested-With: XMLHttpRequest 代表通过ajax方式进行访问
#         User-Agent:请求载体的身份标识
#
# 常见的响应头信息
#                     Location: 服务器通过这个头,来告诉浏览器跳到哪里
#             Server:服务器通过这个头,告诉浏览器服务器的型号
#             Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
#             Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
#             Content-Language: 服务器通过这个头,告诉浏览器语言环境
#             Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
#             Refresh:服务器通过这个头,告诉浏览器定时刷新
#             Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据
#             Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
#             Expires: -1 控制浏览器不要缓存
#             Cache-Control: no-cache
#             Pragma: no-cache
# https协议=http+加密
#
                    # 对称秘钥加密 1.0
                    # 非对称秘钥加密  2.0
                    # 证书秘钥加密  3.0
View Code

第一个实例:动态访问百度搜索

import requests
# UA伪装
headers = {
            'Accept-Encoding': 'gzip, deflate, sdch',
            'Accept-Language': 'en-US,en;q=0.8',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'Referer': 'http://www.baidu.com/',
            'Connection': 'keep-alive',
        }
url = "https://www.baidu.com/s?"
wd = input("输入关键字。。。")
param = {
    "wd":wd
}
res = requests.get(url,param,headers=headers)

with open("a.html","w",encoding="utf-8")as f:
    f.write(res.text)
View Code

第二个实例:访问百度翻译:

这个有点疑问,我去抓包,看不到sub   看到的链接访问不成功,不知道为啥,还未解决。

url  = "https://fanyi.baidu.com/sug"
# url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"
kw = input("输入需要翻译的词语。。。")
data = {
"kw": kw
}
res = requests.post(url,data=data,headers=headers).json()
print(res)
#总结一下,支持词语,英译汉 汉译英   别的没测试 不支持句子
#
#
View Code

如何获取动态加载的数据:

自己用抓包工具,自己去看,自己去找,自己去分析
View Code

 

================================数据解析=====================================

1.正则------>跳转

2.bs4------>跳转

3.xpath---->跳转

 

================================验证码识别=====================================

超级鹰

================================防止IP被封=====================================

 

快代理

西祠代理

www.goubanjia.com

#我没测试成功
import requests
import random
if __name__ == "__main__":
    #不同浏览器的UA
    header_list = [
        # 遨游
        {"user-agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)"},
        # 火狐
        {"user-agent": "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"},
        # 谷歌
        {
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"}
    ]
    #不同的代理IP
    proxy_list = [
        {"http": "112.115.57.20:3128"},
        {'http': '121.41.171.223:3128'}
    ]
    #随机获取UA和代理IP
    header = random.choice(header_list)
    proxy = random.choice(proxy_list)
    url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
    #参数3:设置代理
    response = requests.get(url=url,headers=header,proxies=proxy)
    response.encoding = 'utf-8'
    with open('daili.html', 'wb') as fp:
        fp.write(response.content)
View Code

 

================================进程线程池异步===============================

 链接在这里,但是不推荐使用

================================协程异步=====================================

 链接在这里

================================爬虫自动化=====================================

 跳转过去吧

================================框架==================================

跳转过去吧

posted @ 2021-02-16 16:04    阅读(74)  评论(0编辑  收藏  举报