Response响应组件

一、Response响应组件
1、从服务器返回的响应信息
2、Response常用的方法
(1) 获取response对象
response = urllib.request.urlopen(request)

(2) 通过response对象读取网站的内容
html = response.read()

(3) 获取请求的网站服务器返回的响应结果码
code=response.getcode()

结果码:
200--请求资源成功并响应结束
500--请求资源成功,但是服务器内部错误
403--请求的服务器忙
404-请求的资源不存在

(4) 获取请求的资源网站地址
myurl=response.geturl()

(5) 获取请求网站返回的请求头信息
Info=response.info()

二、使用URLLIB爬取贴吧数据项目实践
1、编写main方法,从键盘读取要爬取的贴吧名称,并进行转码
if name == '__main__':
kw = input('请输入贴吧名:')
beginPage = int(input('请输入起始页:'))
endPage = int(input('请输入结束页:'))

url = 'https://tieba.baidu.com/f?'
key = urllib.parse.urlencode({'kw':kw})#对中文进行转码
ss = str(key).split("'")#根据单引号拆分
print(ss)
fullurl = url + ss[0]
print(fullurl)
tiebaSpider(fullurl,beginPage,endPage)

其中tiebaSpider方法为自定义的爬取网页的方法

2、编写tiebaSpider方法,对爬取的网站进行请求和调度(从m到n页之间进行爬取保存)
def tiebaSpider(url,beginPage,endPage):#爬取贴吧的内容,从指定的位置开始爬取
#贴吧爬虫调度器,负责组合处理每个页面的url
for page in range(beginPage,endPage + 1):
pn = (page - 1) * 50 #从第pn条记录开始爬取
filename = '第' + str(page) + '页.html'
fullurl = url + '&pn=' + str(pn)
print(fullurl)
html = loadPage(fullurl,filename)
#print(type(html))
writePage(str(html),filename) #保存爬取的内容到文件中
time.sleep(4) #延时4秒

方法中传递要爬取的贴吧地址和页数

3、编写保存爬取的网页到文件中的方法writePage
def writePage(html,filename): #写文件的方法
#将html内容写入到本地
print ('正在保存' + filename)
f= open(filename,'w')
f.write(str(html))
f.close()
print ('_' * 30)

4、编写加载页面的方法loadPage方法,并获取爬取的页面内容.
def loadPage(url,filename):
#根据url发送请求,获取服务器响应文件
print ('正在下载' + filename)
#设置请求头信息
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
#获取请求对象,准备发送请求
request = urllib.request.Request(url,headers = headers)

#发送请求到服务器,并返回服务器响应的内容
content = urllib.request.urlopen(request).read()
return content #返回

注意:需要使用request = urllib.request.Request(url,headers = headers)
设置请求头信息,用于迷惑网站的反爬虫组件

5、完整代码如下:

* coding:utf-8 *

import urllib.request
import os
import time
def loadPage(url,filename):
#根据url发送请求,获取服务器响应文件
print ('正在下载' + filename)
#设置请求头信息
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
#获取请求对象,准备发送请求
request = urllib.request.Request(url,headers = headers)

#发送请求到服务器,并返回服务器响应的内容
content = urllib.request.urlopen(request).read()
return content #返回

def writePage(html,filename): #写文件的方法
#将html内容写入到本地
print ('正在保存' + filename)
f= open(filename,'w')
f.write(str(html))
f.close()
print ('_' * 30)

def tiebaSpider(url,beginPage,endPage):#爬取贴吧的内容,从指定的位置开始爬取
#贴吧爬虫调度器,负责组合处理每个页面的url
for page in range(beginPage,endPage + 1):
pn = (page - 1) * 50
filename = '第' + str(page) + '页.html'
fullurl = url + '&pn=' + str(pn)
print(fullurl)
html = loadPage(fullurl,filename)
#print(type(html))
writePage(str(html),filename)
time.sleep(4) #延时4秒

if name == '__main__':
kw = input('请输入贴吧名:')
beginPage = int(input('请输入起始页:'))
endPage = int(input('请输入结束页:'))

url = 'https://tieba.baidu.com/f?'
key = urllib.parse.urlencode({'kw':kw})#对中文进行转码%E9%87%91%E9%B1%BC%E5%90%A7
ss = str(key).split("'")#根据单引号拆分
print(ss)
fullurl = url + ss[0]
print(fullurl)
tiebaSpider(fullurl,beginPage,endPage)

三、Requests的请求组件库
1、引入requests组件
Import requests

2、requests的常用方法
(1) 获取请求的网站
htmlurl=requests.get(“url网站地址”)

(2) 获取网站返回的内容信息
strhtml=htmlurl.text;

安装requests组件模块的方法

点击install package即可安装该模块到工程中

示例如下:
import requests

打开要请求的网站地址

html=requests.get("https://www.sohu.com")

获取返回的网站内容

strtxt=html.text

print(strtxt)

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1