Python爬取任意贴吧某页的页面信息

爬虫入门  写了这篇博客记录自己学习的过程

大概思路是这样的 我们打开一个贴吧  比如 巴啦啦小魔仙吧 然后我们发现这个贴吧的网址为

http://tieba.baidu.com/f?kw=%E5%B7%B4%E5%95%A6%E5%95%A6%E5%B0%8F%E9%AD%94%E4%BB%99&ie=utf-8&pn=50

然后我们来分析这个url   直到第一个问号为止是百度贴吧都会有的部分 我们照抄就好了  而kw很明显是关键字 kw后面的=%一堆东西则是巴啦啦小魔仙的url转码部分  这个转码信息我们可以用特殊的网站来获取  网上有很多的   当然python里有urlencode函数可以直接获取  但是python3里这个函数要写成urllib.parse.urlencode这种方式  有点长 后面的&也是分隔符号  ie=utf-8是你用ie浏览器的时候才需要的  所以我们可以删掉这个部分  在后面的pn=50则是第几个页面的关键部分了  这也是静态页面好爬的原因  可以构造url嘛  不难发现  pn = (页面号码 - 1) * 50

我们大概需要这些模块  贴吧爬虫调度模块 处理不同的url需要一个模块  把拿到的页面信息写到本地需要一个模块
还加入了一点反反爬虫部分  就是自己写一个request 假装自己是浏览器

#为了爬某个贴吧中任意起始页面到中止页面的html文件

import os
import urllib.request
import sys


def LoadPage(name , page , url):
	'''
		作用:访问指定的url界面 然后返回html文件
	'''
	headers = {"User-Agent" : "Mozila 5.0.0.4"}
	print("正在下载%s吧第%d页的页面信息"%(name , page))
	request = urllib.request.Request(url , headers = headers)
	html = urllib.request.urlopen(request)
	return html
	


def WritePage(name , page ,html):
	'''
		为了把返回的html文件写入到本地
	'''

	print("正在保存%s吧第%d页的页面信息"%(name, page))

	with open(name + "吧第" + str(page) + "页信息.html" ,"w") as file:
		file.write(str(html))

def TieBaSpider(name , url , beginpage , endpage):
	'''
		作用:一个贴吧爬虫调度器  用来自动访问起始页面到中止页面之间的url地址的html信息而存在
	'''
	for page in range(beginpage , endpage + 1):
		pn = (page - 1) * 50
		SS = "&pn=" + str(pn)
		fullurl = url + SS
		print("-"*50)
		html = LoadPage(name , page ,fullurl)
		WritePage(name , page , html)


if __name__ == "__main__":
	url = "https://tieba.baidu.com/f?"#	这个是贴吧的统一头开头地址
	kw = input("请输入你想查询的贴吧名(不加吧):")
	name = kw
	beginpage = int(input("请输入你想爬取的初始页面号:"))
	endpage = int(input("请输入你想爬取的中止页面号:"))
	#这个步骤是为了转码  url转码格式py3用这个函数是真的麻烦
	kw = {"kw" : kw}
	kw = urllib.parse.urlencode(kw)
	fullurl = url + kw
	#调用这个爬虫调度器来自动爬取页面的html文件信息好了
	TieBaSpider(name , fullurl , beginpage , endpage)

你可能感兴趣的:(Python)