python爬取网页时response.status_code返回418,文件读取写入

Edana ·
更新时间:2024-11-10
· 664 次阅读

问题:


response.status_code为418

问题描述:


当我使用Python的requests爬取网页时response和soup都是None,检查后发现response.status_code为418

错误描述:


经过网上查询得知,418的意思是被网站的反爬程序返回的,网上解释为,418 I’m a teapot
The HTTP 418 I’m a teapot client error response code indicates that the server refuses to brew coffee because it is a teapot. This error is a reference to Hyper Text Coffee Pot Control Protocol which was an April Fools’ joke in 1998.

翻译为:HTTP 418 I’m a teapot客户端错误响应代码表示服务器拒绝煮咖啡,因为它是一个茶壶。这个错误是对1998年愚人节玩笑的超文本咖啡壶控制协议的引用。

解决办法:


当时用了requests库,没有添加请求头等信息,可能被反爬程序识别了,再次请求添加了header的User-Agent信息就可以了。

代码: import requests headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'} res = requests.get(url,headers=headers) 以豆瓣图书为例: import requests class DouBan: def __init__(self, type): ''' 初始化方法,当创建一个类的对象的时候,该方法会被自动执行,不需要手动调用 ''' self.book_type = type self.url = "https://book.douban.com/tag/"+self.book_type+"?start={}&type=T" def get_urls(self): '''该方法用来构造所有的url''' # 列表生成式 return [self.url.format(20*i) for i in range(5)] def parse_url(self, url): '''发送请求并解析数据''' headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'} response = requests.get(url, headers=headers) return response.content.decode() def save_data(self, content, page_count): '''保存数据''' file_name = '豆瓣图书-{}-第{}页.html'.format(self.book_type, page_count) with open('./DouBan/' + file_name, 'w', encoding='utf-8') as f: f.write(content) def run(self): '''爬虫程序启动''' # 1. 构造url地址 request_list = self.get_urls() # 2. 在地址池中进行遍历,每遍历出一个地址就像该地址发送请求,获取响应得到的内容 for url in request_list: # 2.1 发送请求 html_content = self.parse_url(url) # 2.2 二次提取网页中的数据 # 2.3 直接保存网页内容到本地 page_count = request_list.index(url) + 1 self.save_data(html_content, page_count) if __name__ == '__main__': # 1.创建爬虫对象 db = DouBan('小说') # 2.启动爬虫程序 db.run() 另:python读取文件并写入内容到文件

读取文件内容: 

# 读取文件内容并按换行符切分 lines = open("data/voc01.txt", encoding="utf-8").read().split("\n")

写入文件: 

# 追加写入到指定文件 str = "abcd" with open('E:/test/test_en.txt', mode='a+', encoding="utf-8") as w: w.write(str + "\n")

with open("test.txt","w") as file: file.write("hello")

 2

file2 = open("test2.txt","w") file2.write("hello2") file2.close() // close()别忘记()
作者:小王小王指定辉煌



response Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号