Python网络爬虫入门笔记1

使用程序:jupyter notebook

语言:Python3

jupyter中 Markdown用来写笔记,同时能写html代码,Code用来写代码
特性:代码编写顺序无所谓,执行顺序一定是自上而下的。(只要在一个cell中执行定义好多变量函数等,那么数据就会被加载到当前文件缓存中)
-jupyter快捷操作:
       -插入cell        a,b      上插,下插
       -删除cell        x
       -执行cell        shift+enter
       -切换cell模式     m,y  切    markdown,切code
       -切换成编辑模式    代码左侧双击
       -执行结果收回     结果左侧双击 
       -打开帮助文档     shift+tab   调用方法时不知道方法用法
       -自动补全          tab
       -查看快捷键      空白区域左键+h
原文件可导出为html  File--DownLoad as--html一般情况下不要导出,会造成图片缺失
爬虫:编写程序模拟浏览器上网爬取数据  
分类
    -通用爬虫(爬一整张页面源码数据)
    -聚焦爬虫(爬取一部分数据,建立在通用爬虫基础上)
    -增量式爬虫(监测网站更新情况,以便爬取最新更新出来的数据)
    -分布式爬虫(提高爬取效率的终极武器,一般情况不用,因为太快了,会干扰别人网站)
-反爬机制
        -作用到门户网站,保护数据
-反反爬策略
        -作用到爬虫程序,破解反爬机制
-风险 :-干扰网站的正确运行
      - 爬取受法律保护的数据或信息
-如何避免进局子?
           -时常优化自己的爬虫程序
           -在使用传播自己爬取的数据时,审查自己抓取的内容,如果发现了涉及用户隐私和商业机密内容,注意及时停止爬取或传播
-反爬机制
    -robots协议:防君子不防小人,嘿嘿
      -纯文本协议,协议规定网站中哪些数据可以被爬取,哪些不可以被爬取
    -破解:主观性的不遵从该协议即可
    -UA检测:网络后台会检测对应的user-agent,判定当前请求是否异常请求
    -破解: UA伪装,即通过抓包工具获取基于浏览器的user-agent值,将其伪装作用到一个字典中,并将该字典作用到请求方法(get,post)的headers参数中
-request模块:爬虫中基于网络请求的一个模块   pip install (需要导入的模块名) -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
-作用:模拟浏览器发出请求
-编码流程:
     -1.指定url
     -2.发起请求
     -3.获取响应数据(爬取到的页面源码数据)
     -4.持久化储存

1.爬取搜狗浏览器

import requests
#1.指定url
url = 'https://www.sogou.com/'
#2.发起请求get方法的返回值为请求对象
response = requests.get(url=url)
#3.获取响应数据  .text返回字符串类型的响应数据
page_text = response.text
#4.持久化储存
with open('./sogou.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

2.-实现简易网页采集器
   -基于搜狗针对不同的关键词将其对应的页面数据进行爬取 

import requests
keyWord = input('enter a key world:')
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57'
}
# 携带请求参数的url,想要爬取不同关键词对应的页面,需要将url携带参数动态化
# 实现参数动态化:
#               1.携带参数以键值对形式封存到一个字典中
#               2.字典作用到get方法params参数中
#               3.原始携带参数的url需要将参数删除
params ={
    'query':keyWord
}
url = 'http://www.sogou.com/web'
# params参数(字典):保存请求时url携带参数,
# 实现了UA伪装
response = requests.get(url = url,params = params,headers = headers)
# 若出现乱码,则修改响应数据的编码格式为utf-8,目前本人没遇到,但是写了肯定没错
response.encoding = 'utf-8'
page_text = response.text
fileName = keyWord + '.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'爬取完毕!!!')
# 出现问题:异常访问请求(网站后台检测出该次请求是爬虫程序发出,不是浏览器发起的请求都是异常访问请求)
#如何判判定是否浏览器发起的请求(判定请求头中的user-agent)   user-agent -- 请求载体的身份标识   
#请求载体 : 浏览器(浏览器的身份标识统一固定,身份标识可以从抓包工具中获取)或爬虫程序(身份标识是各自不同的)        

、 3.-爬取豆瓣电影的电影详情数据 url:https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action=
    -动态加载数据的捕获
        -动态加载数据:使用requests模块无法实现每次都可见  
        原因:有些数据是通过非浏览器地址栏的url请求到的,这些通过其他请求请求到的数据就是动态加载的数据
        -如何检测是否存在动态加载数据:基于抓包工具进行局部搜索  找个响应中内容ctrl+f搜索想要爬取数据 0 of 0 即为动态加载数据
        -如何捕获动态加载数据:基于抓包工具进行全局搜索(非100%成功) 列表栏单击然后ctrl+f 定位到动态加载数据包可以提取出
                                                          -请求的url(去掉问号后内容)
                                                          -请求方式
                                                          -请求携带的参数
                                                          -看到响应数据

 

import requests
headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57'
}
url = 'https://movie.douban.com/j/chart/top_list'
params = {
    'type': 13,
    'interval_id': '100:90',#评分区间
    'action': '',
    'start': '0',           #从第几部开始取
    'limit': '20'           #一次取多少部
}
response = requests.get(url = url,params = params,headers = headers)
# .json将获取字符串形式的json数据反序列化字典或者列表
page_text = response.json()
# 解析出电影名称和评分
for movie in page_text:
    name =movie['title']
    score = movie['score']
    print(name,score)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念惜`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值