使用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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Python中的`urllib`模块爬取百度贴吧网页内容涉及以下几个步骤: 1. 导入所需的库: ```python import urllib.request from bs4 import BeautifulSoup # 引入BeautifulSoup解析HTML ``` 2. 定义URL和请求头(模拟浏览器访问): ```python url = "https://tieba.baidu.com/" # 百度贴吧首页或其他具体页面地址 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } # 设置用户代理,避免被识别为机器人 ``` 3. 发送GET请求并获取网页内容: ```python response = urllib.request.Request(url, headers=headers) with urllib.request.urlopen(response) as response_obj: html_content = response_obj.read().decode('utf-8') ``` 4. 解析网页内容: ```python soup = BeautifulSoup(html_content, 'lxml') # 使用BeautifulSoup解析HTML # 找到你需要的内容,如帖子列表、文章等,可能需要用到`soup.find_all()`或`.select()`方法 content_items = soup.select('.post-content') # 假设.post-content是帖子内容的CSS选择器 ``` 5. 处理数据: ```python for item in content_items: post_text = item.get_text() # 获取文本内容 print(post_text) ``` 6. 结果保存或进一步处理: ```python # 可选:将抓取的数据写入文件或数据库,或者做更复杂的分析操作 ``` 注意:在实际爬虫中,请遵守网站的robots.txt规则,并尊重版权,不要频繁发送请求导致服务器压力过大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值