python爬虫笔记
找到了一个网址 https://blog.csdn.net/belalds/article/details/80694126
1.使用requests库
import requests#导入requests库
response = requests.get('https://douban.com/') #使用requests的GET方法获得豆瓣首页
requests.post('jttps://www.douban.com/') #使用post方法
使用Requests请求方法后,系统会返回一个响应(response )对象,其存储了服务器响应的内容。现在回到最开始使用GET方法获取到的响应response,可以使用response.text获取文本方式的响应体内容,Requests 会自动解码来自服务器的内容,大多数unicode字符集都能被无缝地解码。请求发出后,Requests 会基于HTTP头部对响应的编码做出有根据的推测。当访问responsetext时,Requests 会使用其推测的文本编码。可以使用如下命令找出Requests使用了什么编码。
response .encoding
显然,Reqeusts 使用utf-8 解码了来自豆瓣服务器的内容。也可以修改response.encoding属性来让response.text使用其他编码进行解码,示例如下。
response.encoding = 'ISO-8859-11'
如果改变了编码, 每次访问response.text, Requests 都将会使用response encoding的新值。大多数情况下,Requests 会自动解码来自服务器的内容,所以并不需要改变response, encoding,只有在使用特殊逻辑计算出文本编码的情况下,才需要修改编码。例如HTTP和XML自身可以指定编码,这样的话,可以使用response.content 查看网页源码来找到其编码方式,然后设置response encoding为相应的编码。这样就能使用正确的编码解析response.text了。
response content以字节的方式访问请求响应体,假如获取的是一张图片,可以直接保存请求返回的response. content二进制数据。
with open('tupian.jpg', 'wb') as tp: tp. write (response . content)
响应状态码(HTTP Status Code )是用以表示网页服务器HTTP响应状态的3位觉字代码。可以使用response. status_code 查看响应状态码,200:请求成功;301:网页被永久转移到其他URL;404:请求网页不存在;500:内部服务器错误。
服务器通过读取请求头部的用户代理信息来判断该请求是正常的浏览器还是爬虫。可添加HTTP头部来伪装成正常浏览器。需要传递用户代理的dict给headers参数即可:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36'}
res = requests.get(url , headers=headers)
r.history追踪重定向
设置timeout = ?在经过?秒数时间之后会停止等待响应,以防止服务器没有响应。
requests.get(url , timeout = 3)
Urllib库
Urllib内含4个模块:urllib.request--打开和读取url;urllib.error--包含Urllib.request各种 错误的模块;urllib.parse---解析URL;urllib.robotparse---解析网站robots.txt文件
重复爬取,简单理解为,网页A包含了网页B的链接,而网页B又包含了网页A的链接,那它们之间就会形成一个闭环。
发送GET请求
from urllib.request import urlopen
html = urlopen('http://baidu.com/')
response = html.read()
print(response)
print(response.decode('utf-8'))
首先从urllib.request引入urloprn函数,使用此函数向百度发送请求,会返回一个二进制对象html,对此html对象进行read操作,可得到一个包含网页内容的二进制响应。