Scrapy框架
1.爬虫队列
爬虫分为广度爬虫和深度爬虫。
广度爬虫是使用队列来存放url地址。其会在我们将一个地址传给他时,将地址存入队列,然后取出先放入的url地址,对url地址进行解析,将解析到的url地址再放入队列,这样无限循环下去,直到队列中没有url地址。
我们来看下面的一个爬虫,
from queue import Queue
import requests
import lxml.html
class DownloadItem:
"""
下载url对象
"""
def __init__(self, url_str, url_type):
"""
初始化函数
:param url_str: 网址
:param url_type: 网址类型 0 首页 1 详情页
"""
self.url = url_str
self.type = url_type
download_queue = Queue()
seed_item = DownloadItem("https://tieba.baidu.com/f?fr=ala0&kw=python&tpl=5", 0)
download_queue.put(seed_item)
while not download_queue.empty():
# 从队列中取数据
download_item = download_queue.get()
if download_item.type == 0:
# 访问节点
result = requests.get(download_item.url)
# 解析
parser = lxml.html.fromstring(result.text)
posts = parser.xpath(<