python爬虫01

什么是爬虫

通过编写程序,模拟浏览器上网,然后让其在互联网上抓取数据的过程

爬虫分类

  • 通用爬虫:抓取系统重要组成部分,抓取的是一整张页面数据
  • 聚焦爬虫:建立在通用爬虫基础上,抓取的是页面中特定的局部内容
  • 增量爬虫:用来检测网站中数据更新的情况,只会抓取网站中最新更新出来的数据

反爬机制

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

反反爬策略

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

robots.txt协议

规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取

http&https

常用请求头信息

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

常用响应头信息

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

加密方式

  • 对称秘钥加密
  • 非对称秘钥加密
  • 证书秘钥加密

requests模块

python中原生的一款基于网络请求的模块,功能强大,简单便捷,效率极高

  • urllib模块
  • requests模块

作用:模拟浏览器发请求

如何使用(requests模块的编码流程)

  1. 指定url
  2. 发起请求
  3. 获取相应数据
  4. 持久化存储

环境安装

pip install requests

实战编码

  • 需求:爬取搜狗首页的页面数据
#网页采集器
import requests
# UA:User-Agent(请求载体的身份标识)
# UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的身份标识为某一款浏览器,
# 说明该请求正常请求,但是如果检测到的不是浏览器标识,说明是爬虫,则服务器可能拒绝该次请求
# UA伪装:爬虫请求载体的身份标识伪装成浏览器
if __name__ == "__main__":
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
    }
    url = 'https://www.sogou.com/web'
    #处理url携带的参数:封装到字典中
    kw=input('enter a word:')
    param ={
        'query':kw
    }
    #发起请求的url是携带参数的
    response = requests.get(url=url,params=param,headers=headers)
    page_text = response.text
    fileName = kw +'.html'
    with open(fileName,'w',encoding='utf-8') as fp:
        fp.write(page_text)
    print(fileName,'保存成功')


  • 需求:百度翻译
# 百度翻译
# post请求,携带了参数,响应数据是json数据
import requests
import json
if __name__ == "__main__":
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
    }
    post_url = 'https://fanyi.baidu.com/sug'
    #post请求参数处理
    words = input('input words:')
    data={
        'kw':words
    }
    response = requests.post(url=post_url,data=data,headers=headers)
    #json方法返回json对象
    dic_obj = response.json()
    #持久化存储
    fp = open(words+'.json','w',encoding='utf-8')
    json.dump(dic_obj,fp=fp,ensure_ascii = False)
    fp.close()
    print('over!')
  • 爬取豆瓣电影
# 每种类型爬取排行前十的电影
import requests
import json
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
url = 'https://movie.douban.com/j/chart/top_list?'
moves = []
for type in range(1,32):
    type = str(type)
    param = {
        'type': type,
        'interval_id': '100:90',
        'action': '',
        'start': '0',
        'limit': '10'
    }
    response = requests.get(url=url, params=param, headers=headers).json()
    move = {
        'type':type,
        'content':response
    }
    moves.append(move)
    # json.dumps()可以将列表(字典)类型转换为json字符串
    json.dumps(moves)
with open('./moves.json', 'w', encoding='utf-8') as fp:
    json.dump(moves, fp=fp, ensure_ascii=False)
print('over!')

你可能感兴趣的:(python,python,爬虫,开发语言)