Spider模板

个人总结的Spider模板。

import requests
from lxml import etree
import threading
import queue

# 获取网页源数据,返回element object
def get_page(url):
	headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
    }
    try:
        respone = requests.get(url=url,headers=headers).text
        element_obj = etree.HTML(respone)
    except:
        return None
    return element_obj
# 进行网页数据解析,返回数据任务队列q
def params_page(ele_obj)
	titles = ele_obj.xpath('')
    links = ele_obj.xpath('')
    ...
    if links:
        # 构造任务队列
        q = queue.Queue()
    	data = zip(titles,links,...)
        # 压数据进队
        for i in data:
            q.put(i)
        return q
    return None
# 进行数据存储
def store_data(qobj):
    while not qobj.empty():
        data = qobj.get()
        print(f'正在下载:{item[0]}')
        with open(path, 'wb+') as obf:
            obf.write(requests.get(url=data[1], headers={"User-Agent": "Mozilla/5.0 (Windows 								NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 								Chrome/86.0.4240.183Safari/537.36"}).content)
        print(f'任务下载完成:{item[0]}')
if __name__ == "__main__":
    url = ''
    elobj = get_page()
    if elobj:
    	qobj = params_page
        if qobj:
    		threads = []
            # 构造多线程 20个
    		for th in range(20):
        		t = threading.Thread(target=stroge_video, args=(li,))
        		t.start()
        		threads.append(t)
    		for thread in threads:
        		thread.join()
         else:
             print("网页数据解析失败")
    else:
        print("网站请求错误")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值