python爬虫——最基础笔记
来源:互联网 发布:linux rpm安装命令jdk 编辑:程序博客网 时间:2024/06/04 19:29
爬虫——模拟客户端发送请求,爬取互联网信息的程序。
基本步骤:1、获取url地址。 2、发送请求,获取响应数据(模拟浏览器)。3 提取数据。4、数据保存。
今天只是实现了最最最最最简单的爬虫,没有多进程,没有循环。
1、获取url地址。:
工具:浏览器(推荐Chrome谷歌浏览器)
打开浏览器,按F12启动开发和调试器,输入心仪网址(例如度娘),刷新当前页面,点击Network,查看返回文件群。
返回的文件格式一般图片是 png、jpg等,以及html报文所需要的组件 css, js文件,网页信息文件一般在 后缀是html文件、或者json文件(js)结尾。
url地址一般在点击该文件后出现的”Headers”的”General”的”Requests URL”中一般不直接复制浏览器中的地址(有些浏览器时隐藏部分参数的)。
ps:动态网址,此方法失效。实战里要爬取多个网页,需要rul群,这样就需要找到url规律。一般网站观察跳几页参数规律就能找到,url中有些参数一直不变的可以尝试删除。
2、发送请求,获取响应数据(模拟浏览器)。
发送请求,获取响应报文
发送请求其中一种方式是利用urllib(urllib3)模块
简单参考:http://www.cnblogs.com/KGoing/p/6146999.html
这里使用Requests模块,因为urllib的功能它都有,且更简单,更全面(别人说的)
ps:requests的开发哲学
1. Beautiful is better than ugly.(美丽优于丑陋)2. Explicit is better than implicit.(直白优于含蓄)3. Simple is better than complex.(简单优于复杂)4. Complex is better than complicated.(复杂优于繁琐)5. Readability counts.(可读性很重要)
http发送请求分为get、post
对比理解get、post不同之处 get发送透明报文,post一般是发送加密报文请求数据(比如账号密码登录,需要提交数据请求用户界面。)相比于get请求,简单的post请求需要多传输data数据(一般json格式的)。
代码如下:
发送get请求
import requestsurl='https://www.baidu.com/';response =requests.get(url) print(response.status_code) #响应对象response的方法 status_code 返回200 成功。print(response.content) #content方法返回的是字节类型,也即是二进制,如果需要接收图片的话返回这个类型,print(response.content)
三种将二进制字节类型转换成str字符串:
reponse.content.decode() #默认按照utf-8编码解码
reponse.conent.text #封装的text 方法
reponse.content.decode(‘GKB’) #GKB接触不多,前两种不行再用它。
发送简单的post请求
以模拟翻译网页为例,不同的是传给服务器的具体数据,得去网站自己获取,操作类似url获取方式,现在大部分使用json数据,下面注释部分是提取过程用到了json方法,结果是 HOW ARE YOU
import requestsimport jsonurl ='http://fanyi.baidu.com/v2transapi';post_data ={ "from": "zh", "to": "en", "query": '你好吗', "transtype": "translang", "simple_means_flag": "3" }response=requests.post(url, data=post_data)print(response.status_code) #成功的话返回200# r=response.content.decode()# dict_response=json.loads(r)# str=dict_response['trans_result']['data'][0]['dst']# print(str) #HOW ARE YOU对应字段 'query':‘你好吗’
在请求代码中可以传递常用的几个参数:
一、url——字符串类型(已经用烂了)
二、headers——json类型,名为请求头,爬虫用来模拟浏览的参数,常传参数是浏览器代理{‘User-Agent’:’…’} ,同一个浏览类的值不变,以及cookie
就是让爬虫程序伪装的更像游览器所传递的参数
import requestsurl='https://www.baidu.com/';headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'}response =requests.get(url,headers=headers)print(response.status_code)
三、params 是指url 的参数,以百度搜索 123 为例
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=123&oq=%25E4%25BD%25A0%25E5%25A5%25BD&rsv_pq=819dcc8e000071c3&rsv_t=7e88oPiHu29BNZl7nPHv4fCCYF%2FaaGv4%2BxSi8tWy55zNmBp1kq7APfIxwQ4&rqlang=cn&rsv_enter=1&inputT=925&rsv_sug3=10&rsv_sug1=9&rsv_sug7=100&rsv_sug2=0&rsv_sug4=926
可以找到www.baidu.com后面一大堆里有个参数:wd=123
import requestsurl='https://www.baidu.com/';parmas ={'wd':'123'}response =requests.get(url,params=parmas)print(response.status_code)print(response.url) # https://www.baidu.com/?wd=123
# 这个代码的url是失败的,没有返回正确的123搜索链接,不过参数传进去了。哈哈可以达到两个目的,第一参数传递完成了,第二有些看不懂的参数还是要传递的,正确的url不总是那么简单!
四、proxies 代理,运用代理可以隐藏真实的访问ip地址,使用多个代理,可以有效的反反爬虫。同样是为了装的很像。
实战的时候用一堆代理,爽歪歪。
例如:
import requestsproxies = {"http":"http://107.175.146.5:1080";} #此代理网上找的免费代理,啥时候失效看人家了r = requests.get("http://www.baidu.com",proxies=proxies)print(r.status_code)
3 提取数据(json、正则、xpath、selenium等)。
此处只先提出方法,举例最简单的方法其他单独补充
数据提取最简单的方式,没有过滤的话是response.content.decode()/response.content.text,直接可以获取响应全部报文
代码如下:
import requestsurl='https://www.baidu.com/';parmas ={'wd':'123'}headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'}response =requests.get(url,headers=headers,params=parmas)text =response.content.decode()print(text)
具体提取(就不写了,到时候需要学好了找个单独位置写):
1)正则表达式匹配
2)json方法提取转化
3)lxml、xpath 定位元素提取
4)selenium 自动化测试工具获取提取数据
4 数据保存
4.1保存文字
import requestsurl='https://www.baidu.com/';headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'}response =requests.get(url,headers=headers)text =response.content.decode()# 将提取的字符串,保存在本地文件中with open('wendang.txt','w') as file: file.write(text)
4.2保存图片
import requestsr =requests.get('https://www.baidu.com/img/bd_logo1.png') #获取图片地址保存with open ('baidu.gif','wb') as f: f.write(r.content) # 图片格式是二进制数据,不能保存图片使用字符串保存。conent后千万不要去解码了。
- python爬虫——最基础笔记
- python爬虫——写出最简单的网页爬虫
- python爬虫——BeautifulSoup基础操作
- Python爬虫——Web基础
- python爬虫-->爬虫基础
- python 爬虫基础笔记(一)
- 【python学习笔记】7:用python实现爬虫-基础
- Python爬虫基础——利用cookie实现模拟登陆
- Python 爬虫知识记——基础篇
- python学习之路——爬虫基础
- 正则表达式基础——以Python爬虫为实例
- python爬虫——web前端基础HTML+CSS
- Python爬虫教程——入门一之爬虫基础了解
- Python爬虫基础实战——用爬虫来自动翻译英文文档
- python——爬虫
- python——爬虫
- Python——爬虫
- python爬虫—安装
- ping功能实现
- springboot创建bean异常
- [Android]Fragment进行show和hide时候刷新数据
- 数据库
- 【软考】各种策略和相关的代表性算法
- python爬虫——最基础笔记
- 软连接与硬链接的区别,以及如何删除软链接
- Oracle:in操作符
- [Leetcode] Math & Dynamic
- idea修改项目、模块、文件编码方法
- BottomTabBar依赖
- linux安装composer
- 前端时遇到的问题
- [故障诊断]TE田纳西-伊斯曼过程数据集