看了CZBK的一个老师的很老的视频,做个小小的记录。
首先是主函数,
if __name__ == "__main__":
url =input("请输入贴吧的url")
print (url)
begin_page = int(input("请输入起始页码"))
end_page = int (input("请输入终止页码"))
# print (begin_page)
# print (end_page)
tieba_spider(url,begin_page,end_page)
作为程序入口
然后我们写一个页面loading函数。
def load_page(url):
'''
发送url请求
返回url请求html页面
'''
user_agent="Mozilla/5.0(compatible; MSIE 9.0; Window NT 6.1; Trident/5.0;"
hearers = { "User_Agent":user_agent}
req = urllib.request.Request(url, headers = hearers)
response = urllib.request.urlopen(req)
html = response.read()
# print (html)
return html
另外还需要组成贴吧URL的贴吧方法
def tieba_spider(url, begin_page,end_page):
'''
贴吧方法
'''
for i in range(begin_page,end_page+1):
#i = 1, pn = 0
#i = 2, pn = 100
#i = 3, pn = 150
#...
pn = 50 * (i - 1)
#组成一个完整url
my_url = url + str(pn)
# print("请求地址:")
# print(my_url)
tiehtml = load_page(my_url)
# print("=====这是第%d==="%(i))
# print (tiehtml)
# print("==================")
file_name=str(i)+".html"
write_to_file(file_name,tiehtml)
当然我们还要对HTML页面进行存储,存储的步骤是打开文件,读写文件,关闭文件。文件读写完毕一定要及时关闭,要不然会对系统造成不必要的浪费。
def write_to_file(file_name,txt):
'''
将text文本 存入file_name文件中
'''
print("正在存储文件:"+file_name)
#1打开文件
f = open(file_name,'wb+')
#2读写文件
f.write(txt)
#2关闭文件
f.close()
按照程序提示的步骤一步步提交所需参数,就可以得到如下图所示。
当然这个是对网页没有任何处理的,我们跳过了爬虫筛选的重要一步。
image.png爬虫的步骤参考下图
image.png小记一下,今天使用open打开文件的时候出现了下面的错误。
注:我用的是Python3.6.1版本。
TypeError: write() argument must be str, not bytes
网上搜索才发现原来是文件打开的方式有问题。
之前文件打开的语句是:
filehandle = open(WAV_FILE, 'w')
然后使用二进制方式打开就没有这个问题:
filehandle = open(WAV_FILE, 'wb+')
产生问题的原因是因为存储方式默认是二进制方式。
网友评论