zoukankan      html  css  js  c++  java
  • ulrlib案例-爬取百度贴吧

    1.任务需求

    百度贴吧有很多主题,每个主题下的网页存在很多分页。爬取不同的主题,并下载每个主题下的多页网页。

    输入贴吧名称,下载相应贴吧的多页网页,设置最多下载50页。

    2.分析网页

    访问不同的百度贴吧时。尝试搜索多个贴吧,观察到浏览器的url中的kw为贴吧的名称。

    因此,发送get请求时,设置不同的kw可以访问不同的贴吧。

    同一主题的贴吧中,有分页,通过点击不同的分页,可以看出,url中的pn规律变化

      第1页 pn = 0

      第2页 pn=50

      第3页 pn=100

    据此规律可以爬取不同页数的网页。

    3.代码实现

     1 from urllib import request,parse
     2 import time
     3 import random
     4 import os
     5 
     6 kw = input('请输入贴吧名称:')
     7 start = input('请输入起始页:')
     8 end = input('请输入结束页:')
     9 
    10 # 构建请求字符串
    11 qs = {
    12   'kw':kw
    13 }
    14 qs = parse.urlencode(qs)
    15 
    16 # 构建贴吧链接地址
    17 base_url = 'https://tieba.baidu.com/f?' + qs
    18 
    19 start = (int(start) - 1) * 50
    20 end = (int(end) - 1) * 50 + 1
    21 
    22 for pn in range(start,end,50):
    23   # pn 分页数字
    24   # 文件名
    25   fname = str((pn//50 + 1)) + '.html'
    26   fullurl = base_url + '&pn=' + str(pn)
    27   print(fullurl)
    28   response = request.urlopen(fullurl)
    29   data = response.read().decode('utf-8')
    30 
    31   # 自动创建目录
    32   path = './tieba/' + kw
    33   if not os.path.exists(path):
    34   os.makedirs(path)
    35 
    36   with open(os.path.join(path,fname),'w',encoding='utf-8') as f:
    37     f.write(data)
    38 
    39   # 加入请求间隔
    40   time.sleep(random.random() * 2)

    4.注意事项

    后面的加入随机请求间隔,防止请求过于频繁导致被封IP。

  • 相关阅读:
    Github账户注册的过程
    目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
    作业二:四则运算
    学习进度
    对构建之法的一些问题
    个人介绍
    对《软件工程》课程的总结
    作业八 更新版
    作业八
    冲刺总结博客
  • 原文地址:https://www.cnblogs.com/doitjust/p/9275854.html
Copyright © 2011-2022 走看看