使用python的requests模块实现百思不得其姐抓取(多线程版)

本文介绍了如何使用Python的requests、lxml、json、queue和threading模块,实现抓取百思不得姐网站前50页用户昵称、标题、图片等信息。通过分析URL规律和DOM结构,采用多线程提高效率,并利用os模块处理文件名,使保存的文件直观易懂。
摘要由CSDN通过智能技术生成

今天要抓取的是百思不得姐,网址是‘http://www.budejie.com/’,先明确一下我们的步骤和使用的模块

一 、使用的python模块 requests,lxml,json,queue,threading,os
1 requests模块主要用来发起请求,获得响应。
2 lxml模块的etree可以用xpath提取数据。
3 json模块把python的字典转化为字符串,保存数据
4 os 模块 处理文件名
5 threading和queue模块实现多线程

首先打开chrome浏览器,进入百思不得姐的首页
大概就是这个样子
我们的目标是爬取前50页面所有用户的 昵称 标题 图片 点赞的数量 踩的数量 以及消息发布的时间
分析url地址的变化情况发现第二页的url是‘http://www.budejie.com/2’。
通过多翻几页后,不难发现,url地址的变化规律与当前页数有关在这里插入图片描述
再通过抓包地址分析DOM结构,发现每个用户的信息都在ul下面的li下在这里插入图片描述
我们需要通过xpath提取的用户的信息都在li标签里
在这里插入图片描述
,ok开始写代码。
注意了,由于是多任务实现的 记得要给线程加锁

def main():
	# 页码url的队列
	page_q = Queue(100)
	# 获取到内容的队列
	item_q = Queue(1000)
	# 图片的队列
	img_q = Queue(1000)

	url = 'http://www.budejie.com/{}'
	for i in range(1,50):
		page_q.put(url.format(i))
	for x in range(5):
		pr = Producer(page_q,item_q,img_q)
		pr.start()
	for x in range(5):
		co = Consumer(page_q,item_q,img_q)
		co.start()

在main函数中是我们的启动函数 创建了5个生产者,5个消费者,url通过format方法配合循环进行构造,构造完成就把它放入页面的url的队列中。

class Producer(threading.Thread):

	def __init__(self,page_q,item_q,img_q,*args,**kwargs):
		super(Producer, self).__init__(*args,**kwargs)
		self.page_q = page_q
		self.item_q = item_q
		self.img_q = img_q
	def parse_url(self,url):
		response = requests.get(url,headers=headers)
		resp 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值