博主是新手,只是做个笔记,不好勿喷
爬取目标
手动输入主题,并爬取目标主题内容的前三页
爬取之后保存在html文件当中
爬取思路
第一步创建一个类,类中定义三个函数,分别为主函数、爬取函数和保存函数。
第二步找到相应的请求头以及url,为防止将url写死,观察url组成部分,为最终进行相应的拼接做准备。
第三步手动设置输入主题以及想获取的页数。
爬取函数主要运用urllib中的request和parse模块
保存函数中主要运用open方法保存文件
详见代码
import urllib.request
import urllib.parse
import random
class baidu():
def __init__(self):
list = [{
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'},
{
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24'}]
self.headers = random.choice(list)
self.baseurl = "https://tieba.baidu.com/f?"
def readpage(self,url):
rep = urllib.request.Request(url)
p = urllib.request.urlopen(rep)
html = p.read().decode('utf-8')
return html
def writepage(self,html,filename):
with open(filename,'w',encoding='utf-8')as f:
print("开始打印")
f.write(html)
def main(self):
name = input("请输入主题:")
start = int(input("请输入起始页"))
end = int(input("请输入尾页"))
kw = {'kw': name}
kw = urllib.parse.urlencode(kw)
for i in range(start, end + 1): # 总共循环k次
pn = ((i - 1) * 50) # 分析url页码和i值的关系
url = self.baseurl + kw + '&pn' + str(pn) # 分析url组成部分
html = self.readpage(url)
filename = '第' + str(i) + '页.html'
self.writepage(html, filename)
if __name__=='__main__':
p = baidu()
p.main()