ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-09 12:00:46  阅读:201  来源: 互联网

标签:surl request 页数 urllib 爬取 print 百度


一、使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有