爬取整个百度贴吧

本文介绍了如何使用Python爬虫爬取整个百度贴吧,包括每个帖子及其楼层内容。首先分析贴吧和帖子URL的规律,然后从源代码中提取帖子链接。接着,通过观察页面结构找到页数信息,实现爬取多页。代码实现过程中要注意源代码与检查元素的差异,确保正则表达式的正确性。
摘要由CSDN通过智能技术生成

前言

python爬虫方面的内容大部分都是在学姐的指导下参考着崔庆才的博客写的,这次的任务是爬取一整个贴吧,并写出一个通用的代码来。参考了崔庆才的爬取帖子的博客,可以先看看里面的内容,讲解的比较详细清楚

附上传送门http://cuiqingcai.com/993.html

任务目标

1、爬取下来整个贴吧,例如无双剑姬吧的所有帖子和帖子楼层里的内容(不包括回复)

2、写出通用的代码,可以简单的实现爬取别的贴吧

大体思路

大体上分为两个部分,贴吧部分和帖子部分,这是两个链接类型,在贴吧部分我们需要实现的是找到每个帖子的地址链接,在帖子部分我们需要做的就是将我门需要的内容爬取下来

1、从贴吧的源代码中实现找到每个帖子的地址

首先观察贴吧url:

http://tieba.baidu.com/f?kw=%CE%DE%CB%AB%BD%A3%BC%A7&fr=ala0&tpl=5

这是无双剑姬吧首页的url,好像看不出啥,中间一大堆乱码的,再来看看第二页的:

由于编码问题,浏览器中间部分复制地址的时候是乱码的,其实换成utf-8格式的话就是贴吧名字


然后观察每个帖子的url,随便打开几个帖子观察有什么规律:

http://tieba.baidu.com/p/4892424536

http://tieba.baidu.com/p/4900001683

http://tieba.baidu.com/p/2842025455

观察可以看出来帖子之间url的去别应该是没个帖子都有一个特殊的代号例如4892424536 ,换个贴吧也是一样的。接下来就可以在源码中把我们要用的爬取下来。



在这里需要注意的是,检查元素和查看页面源代码中看到的是有点不一样的,比如这次的,第一个是源代码,第二个是检查元素,两个写出来的正则肯定有点不一样,第二种虽然方便,但是不一定能匹配到,写的爬虫中获取的网页是源代码,跟第一个一样的,所以我们写正则的时候要按照源代码来写。

pattern = re.compile('<a href="/p/(\w*)" title="', re.S)
可以写一个简单的函数测试下

# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
from bs4 import BeautifulSoup
url ='http://tieba.baidu.com' + '/f?kw='+'无双剑姬' + '&ie=utf-8&pn=&pn='


request = urllib2.Request(url)
response = urllib2.urlopen(request).read()
pattern = re.compile('<a href="/p/(\w*)" title="', re.S)
items = re.findall(pattern, response)
contents = []
for item in items:


    contents.append(item.encode('utf-8'))
print contents


D:\Python2.7\python.exe C:/Users/jin/PycharmProjects/untitled/BaiDuTieBa/ceshi.py
['4810437627', '4357309014', '2699923439', '4904565298', '4858937315', '4904688967', '4897517850', '4904352257', '4896960759', '4836534322', '4850953681', '4866690931', '4901108246', '4683227974', '4904509220', '4883021415', '4903211842', '4901679966', '4904161919', '4898409493', '4904421801', '4898097487', '4904147219', '4904529036', '4716566198', '4883884875', '4892708618', '4872615105', '4899990434', '4880760823', '4879886617', '4903176679', '4904143329', '4899405760', '4901463405', '3606442233', '4897567192', '4737113765', '4730786446', '4902945899', '4903761601', '4873677499', '4712812826
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值