eg:
#要爬取某个贴吧前100页内容
import requests
class TiebaSpider:
def init(self,name,num):
self.num=num #爬取页面数量
self.name=name #爬取贴吧名称
self.url_temp=“https://tieba.baidu.com/f?kw="+self.name+"&ie=utf-8&pn={}” #打开浏览器照着写
self.headers={“Referer”:“https://tieba.baidu.com/f?kw=李毅&ie=utf-8”,
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36”,
“Request URL”: “https: // tbmsg.baidu.com / gmessage / get?mtype = 1 & _ = 1556541342355”,
“Request Method”: “GET”
}
def get_url_list(self):
return [self.url_temp.format(i*50) for i in range(self.num) ]
def parse_url(self,url): #获取每一个url的响应并且解析,注意这里解析是utf-8
print(url) #输出这个url,让我们看一看
response=requests.get(url,headers=self.headers)
return response.content.decode()
def save_html(self,html_str,page_num):
file_path="{}-第{}页.html".format(self.name,page_num)
with open(file_path,"w",encoding="utf-8") as f:
f.write(html_str) #保存html字符串,就是网页内容
def run(self):
#1.前100页的url列表,因为是同一个贴吧所以其url必有规律,
# 为了代码复用,因为不同贴吧名称.url不同,所以封装个函数专门处理url
url_list=self.get_url_list()
#2.遍历每个url,发送请求,获取对应的响应并保存
for url in url_list:
html_str=self.parse_url(url)
page_num=url_list.index(url)+1 #当前页码数
self.save_html(html_str,page_num)
if name==“main”:
liyi=TiebaSpider(“Liyi”,100)
liyi.run()
补充:
响应头中set-cookies 的内容是服务器在我们本地加载的cookies
当爬虫被识别出时,服务器可能给你一些无用内容
把请求头中键值对抄到header中,发动请求
在url中参数有一些 %开头,是经过编码后的结果,可以在线查询对应内容
以后用面向对象思维去写,上来class,内置run方法,运行这个类,在这个方法内写入运行该类步骤思想