简单的爬虫爬取整个LOL贴吧网页

2018-07-18  本文已影响0人  carebon

看了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+')
产生问题的原因是因为存储方式默认是二进制方式。

上一篇下一篇

猜你喜欢

热点阅读