爬虫之爬百度贴吧

这个爬虫程序主要是爬取贴吧帖子的title和url,如果需要爬内容只需要修改部分代码就行
我使用的技术是python和xpath

思路:

  1. 获取主URL
  2. 获取数据
  3. 提取数据,进行解析
  4. 获取下一页的url
  5. 终止循环

代码:

import requests
from lxml import etree

class PaChong(object):
	"""爬百度贴吧"""
	
	def __init__(self, name):

        self.url = 'https://tieba.baidu.com/f?ie=utf-8&kw={}&fr=search'.format(name)
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
            # 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
            'Referer': 'https://tieba.baidu.com/f?ie=utf-8&kw=kenshi&fr=search'
        }

	def get_data(self, url):
		
		response = requests.get(url)
		return response.content
	
	def parse_data(self, data):
		
		data = data.decode().replace('<!--', '').replace('-->', '')
		html = etree.HTML(data)
		el_list = html.xpath('//li[@class=" j_thread_list clearfix"]/div/div[2]/div[1]/div[1]/a')
		
		data_list = []
		for i in el_list():
			temp = {
				'title': i.xpath('./text()')[0]
				'url': 'https://tieba.baidu.com' + i.xpath('./@href')[0]
			}
			data_list.append(temp)
		
		try:
			next_url = 'https:' + html.xpath("//a[contains(text(), '下一页')]/@href")[0]
		except:
			next_url = None
		
		return data_list, next_url
	
	def save_data(self, data_list):
	
		with open('aaa.text', 'w', encoding='utf-8') as f:
			f.with(str(data_list))

	def run(self):
		next_url = self.url
		while True:
			data = self.get_data(next_url)
			data_list, next_url = self.parse_data(data)
			self.save_data(data_list)
			
			if next_url == None:
				break

if __name__ == '__main__':

    pa = PaChong('kenshi')
    pa.run()

讲一下部分代码结构
首先请求头,一般使用的浏览器都是谷歌,但是不排除一些比较low的浏览器去访问贴吧,所以贴吧将源码进行注释,谷歌浏览器可以进行解析,但是一般的浏览器不能解析,也就意味着获取不到数据
两种解决方案:

  • 使用低版本的请求头,如:代码中注释的那个
  • 还使用高版本的请求头,但是在解析获取到的数据是,需要将注释的代码替换
    链接,也就是url,因为获取到的url不全,需要进行拼接后再返回
    循环终止,下一页的url获取不到,意味着循环结束
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值