其他分享
首页 > 其他分享> > 使用urllib分页爬取百度贴吧的实践

使用urllib分页爬取百度贴吧的实践

作者:互联网

一、使用urllib分页爬取百度贴吧的实践
1、引入urllib.request组件
2、爬取百度贴吧的基本步骤
(1) 编写loadPage(surl)方法爬取指定url地址的网页,并返回网页的内容
(2) 编写爬虫的方法tibaSprider(surl,pagestartNum,pageendNum),传第三个参数,分别是url 地址,起始页数和终止页数
(3) 编写保存文件的方法writeFilePage(htmltxt,page),传递loadPage方法返回的html内容,并保存到文件中
(4) 编写主方法,从键盘输入要爬取的贴吧名称,起始和终止的页数,并且将名称使用urlencode进行编码和拼接url地址

3、示例如下:
import urllib.request
import os
import time

def loadPage(surl):
request=urllib.request.Request(surl)
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36’}
request = urllib.request.Request(surl, headers=headers)#获取请求对象,并伪装为浏览器访问方式
html=urllib.request.urlopen(request)#传递带有请求头的请求信息
htxt=html.read()
print(htxt.decode(“utf-8”)) #decode方法表示转换字符编码为utf-8
return htxt.decode(“utf-8”)

#爬取指定页数的网址的爬虫方法
def tibaSprider(surl,pagestartNum,pageendNum):
print(“贴吧地址:”,surl)
print(“起始页数:”,pagestartNum)
print(“终止页数:”, pageendNum)
#计算爬取的页数从m-n
for page in range(pagestartNum,pageendNum+1):
#计算pn记录数
pn=(page-1)*50
urlfull=surl+"&pn="+str(pn)
print(urlfull)
print("=第", str(page), "页=============")
htemltxt=loadPage(urlfull)
writeFilePage(htemltxt,page)#写文件操作
time.sleep(4)#等待4秒继续爬取

#定义写文件的方法,将爬取的网页存储到文件中,文件名为页数的名称,方法传递页数
def writeFilePage(htmltxt,page):#打开文件设置编码格式为utf-8

fname="第"+str(page)+"页.html"
f=open(fname,"w",encoding="utf-8")
f.write(htmltxt)
f.close()

if name == ‘main’:
surl=“https://tieba.baidu.com/f?”

#从键盘输入要访问的贴吧名称
tname=input("请输入贴吧名称:")
#包装为字典
dic={"kw":tname}

#将字典转为要搜索的字符串
searcherString=urllib.parse.urlencode(dic)
print("要搜索的转换后的字符串:",searcherString)

#拼接完整的url地址
fullurl=surl+searcherString
print(fullurl)
startnumString=input("请输入起始页数:")
startpageNum=int(startnumString)

endnum=input("请输入终止页数:")
endpageNum=int(endnum)

#调用爬虫的方法
tibaSprider(fullurl,startpageNum,endpageNum)


#loadPage(fullurl)

标签:surl,request,页数,urllib,爬取,print,百度
来源: https://blog.csdn.net/qq_48288251/article/details/118603278