第一个爬虫程序,爬取百度贴吧页面
运行环境: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函数进行拼接
上图我们可以看出来拼接的结果
良好的爬虫习惯,设置请求头。
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())