python爬虫学习之旅(三)

第一个爬虫程序,爬取百度贴吧页面


运行环境:Python3
编译软件:Sublime


 
 
爬取第一步,确定你要爬取页面的url。

随便选取一个贴吧,假如选择python吧
其第一页的链接为:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0
第二页链接为:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
根据这个规律查看下去,会发现这样的规律

页码pn = ?
1pn = 0
2pn = 50
3pn = 100

 
就可以设置默认url为

url = 'http://tieba.baidu.com/f?ie=utf-8&'

 
将页面的其他属性存入字典中,以便可以与原url进行很好的拼接

    data = {
        'kw':ba_name,
        'pn':(page-1)*50
    }

 
这里我们存入一个名为data的字典,以便可以使用urlencode函数进行拼接
 
在这里插入图片描述 

上图我们可以看出来拼接的结果

 
 
良好的爬虫习惯,设置请求头。
 

    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0',
    }

 
 
通过urllib函数发送请求以及获得响应。

request = urllib.request.Request(url = url_t,headers=headers)
response = urllib.request.urlopen(request)

 
 
存储数据。

通过你要爬取的贴吧名字创建文件夹并存储数据
 

    #生成文件名
    filename = ba_name +'_' + str(page) + '.html'
    #拼接文件路径
    filepath = ba_name + '/'+filename
	#网页源码都是二进制数据,则通过'wb'形式来存储
    with open(filepath,'wb')as fp:
        fp.write(response.read())

 
之后会在本地得到以吧名命名的文件夹以及相应的html文件
 
在这里插入图片描述
 
但是在这里有个问题,得到的html中,用文本方式打开里面的确是有内容的
 
在这里插入图片描述 
 
 
直接打开html的话却是如下图所示
 
在这里插入图片描述

这个问题暂时还不知道为什么,待解决后会跟进的
 


以下是该程序的源码。
 

import urllib.request
import urllib.parse
import os
import time
#访问指定贴吧下载指定页数内容
url = 'http://tieba.baidu.com/f?ie=utf-8&'

ba_name = input('请输入要爬取的吧名:')
strat_page = int(input('请输入要爬取的起始页码:'))
end_page = int(input('请输入要爬取的结束页码:'))

#创建文件夹
if not os.path.exists(ba_name):
    os.mkdir(ba_name)

for page in range(strat_page,end_page+1):
    data = {
        'kw':ba_name,
        'pn':(page-1)*50
    }
    data = urllib.parse.urlencode(data)
    url_t =url + data
    print(url_t)
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0',
    }

    request = urllib.request.Request(url = url_t,headers=headers)
    print('第%s页开始下载……' %page)
    time.sleep(5)
    #处理post表单数据
    response = urllib.request.urlopen(request)

    #生成文件名
    filename = ba_name +'_' + str(page) + '.html'
    #拼接文件路径
    filepath = ba_name + '/'+filename

    with open(filepath,'wb')as fp:
        fp.write(response.read())


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值