目录
Robots协议(也称为爬虫协议)
Requests 库
requests 入门
保存网页图片 (练习一下requests使用)
获取百度
获取百度加强版
自定义参数
自定义参数(字典版)
获取贴吧n页数据
获取贴吧n页数据(类与对象版)
Robots协议(也称为爬虫协议)robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。
robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

用IDLE写的
import requests
r = requests.get("http://www.baidu.com")
r.status_code
200 #表示正常
r.encoding = 'utf-8'
r.text
用pycharm写:
声明编码格式:
r.encoding = 'utf-8' #编码格式
print(r.text)
另一种方式(等价于上面,节省一行代码) decode( )默认utf-8格式
print(r.content.decode())
保存网页图片 (练习一下requests使用)
import requests
#存放图片链接
image_url = 'http://img.ewebweb.com/uploads/20191231/11/1577761365-bpjNduFZKa.jpg'
response = requests.get(image_url) #请求图片
print(response.content) #图片不需要编码格式
with open('二哈.jpg','wb') as f: # 括号内 第一个是保存到本地的文件名,
# 第二个是文件的访问模式 wb二进制写入文件
f.write(response.content) #用write把内容写入本地
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
print(response.content.decode())
print(response.request.headers) # 请求头
爬虫爬取到的数据比浏览器的少很多 ,很多js都不给
import requests
url = 'https://www.baidu.com'
headers={ #这里是用字典的格式带入了浏览器的请求头
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}
response = requests.get(url, headers=headers) #添加请求头参数
print(response.content.decode())
print(response.request.headers)
数据与百度主页一样,将得到的HTML数据保存打开后就是百度主页
自定义参数import requests
url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=你好'
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}
text =input('请输入要搜索的内容:')
response = requests.get(url.format(text), headers=headers)
print(response.content.decode())
运行出html后得到,
import requests
url = 'https://www.baidu.com/s?'
text =input('请输入要搜索的内容:')
params={'wd':text} #字典形式
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}
response = requests.get(url, headers=headers,params=params)
print(response.request.url) #直接返回搜索后的url链接
获取贴吧n页数据
import requests
url = 'https://tieba.baidu.com/f?kw={}&pn={}' #设置好链接
text =input('请输入贴吧名字:')
#生成url列表 #一页50个帖子,i*50表示第i页
url_list=[url.format(text, i*50) for i in range(5)] #for循环实现下一页
print(url_list) #打印url列表 出现五个链接
将五页贴吧保存下来
import requests
url = 'https://tieba.baidu.com/f?kw={}&pn={}' # 设置好链接
text = input('请输入贴吧名字:')
# 生成url列表 #一页50个帖子,i*50表示第i页
url_list = [url.format(text, i * 50) for i in range(5)] # for循环实现下一页
print(url_list)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}
for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = '贴吧' + text + '第{}页'.format(url_list.index(item_url) + 1) + '.html'
#format()用来填充{}
#index() 函数用于从列表中找出其下标
with open(file_name,'w',encoding='utf-8')as f: #写入html文件需要在open后面定义’utf-8‘
f.write(response.content.decode()) #否则报错
Python的index函数用法
Python中format函数用法
生成了五页贴吧html文件
import requests
class Tieba_spider(object):
def __init__(self, text): # 初始化方法
self.text = text
self.url = 'https://tieba.baidu.com/f?kw=' + text + '&pn={}'
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}
def get_url_list(self):
"""生成url列表"""
url_list = [self.url.format(i * 50) for i in range(5)]
return url_list
def get_data_fromurl(self, url):
'''从服务器获取数据 并且解码返回'''
response = requests.get(url, headers=self.headers)
return response.content.decode()
def save_html(self, html_str, num): # 第一个参数是服务器请求获取到的数据,第二个参数是页数
'''保存到本地'''
file_name = '贴吧' + text + '第{}页'.format(num) + '.html'
with open(file_name, 'w', encoding='utf-8') as f:
f.write(html_str)
def run(self): # run方法用来执行爬虫
'''确定url 生成url列表'''
url_list = self.get_url_list()
for item_url in url_list:
html_str = self.get_data_fromurl(item_url)
'''保存'''
self.save_html(html_str, url_list.index(item_url) + 1)
# 第一个参数是服务器请求获取到的数据,第二个参数是页数
if __name__ == '__main__': # 一个引擎来调用run
text = input('请输入贴吧的名字:')
spider = Tieba_spider(text)
spider.run()
一些小细节导致一直报错,一定要注意参数的带入,