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


运行环境: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 = ?
1 pn = 0
2 pn = 50
3 pn = 100

 
就可以设置默认url为

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

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

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

 
这里我们存入一个名为data的字典,以便可以使用urlencode函数进行拼接
 
python爬虫学习之旅(三) 

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

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

    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文件
 
python爬虫学习之旅(三)
 
但是在这里有个问题,得到的html中,用文本方式打开里面的确是有内容的
 
python爬虫学习之旅(三) 
 
 
直接打开html的话却是如下图所示
 
python爬虫学习之旅(三)

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


以下是该程序的源码。
 

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())


相关文章:

  • 2021-11-23
  • 2021-06-08
  • 2021-01-30
  • 2022-12-23
  • 2022-02-11
  • 2021-08-05
  • 2021-12-05
猜你喜欢
  • 2021-10-11
  • 2021-04-30
  • 2021-12-06
  • 2021-10-26
  • 2021-09-04
  • 2022-12-23
  • 2021-12-28
相关资源
相似解决方案