码迷,mamicode.com
首页 > 其他好文 > 详细

ulrlib案例-爬取百度贴吧

时间:2018-07-07 00:27:41      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:vco   uil   网页   list   elm   amp   lis   div   encoding   

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。

 

ulrlib案例-爬取百度贴吧

标签:vco   uil   网页   list   elm   amp   lis   div   encoding   

原文地址:https://www.cnblogs.com/doitjust/p/9275854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!