您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

百度爬虫工程师教你只用500行Python代码构建一个轻量级爬虫框架

5b51 2022/1/14 8:24:35 python 字数 4780 阅读 682 来源 www.jb51.cc/python

Features 简单、易用; 易于定制的Spider; 多线程实现并发下载。 待改进 更多的测试代码;

概述

百度爬虫工程师教你只用500行Python代码构建一个轻量级爬虫框架

Features

待改进

xcrawler 介绍

项目结构

├── demo (一个示例 Spider)
│ ├── baidu_news.py
│ └── __init__.py
├── README.md (项目文档)
├── setup.py (pip 安装脚本)
├── tests (测试代码,尚未完成)
└── xcrawler (核心代码)
 ├── core
 │ ├── crawler.py (Crawler process,负责管理引擎的配置和启动)
 │ ├── engine.py (Crawler engine,负责调度并完成 URL 请求和调用解析方法)
 │ ├── __init__.py
 ├── __init__.py
 ├── spider
 │ ├── __init__.py
 │ ├── request.py
 │ ├── response.py
 │ └── spider.py (Spider 基类,所有的自定义 Spider 需要从此处继承)
 └── utils (一些工具函数)
 ├── __init__.py
 └── url.py

Crawler engine (生产者+消费者模型)

配置介绍

settings = {
 'download_delay': 0,'download_timeout': 6,'retry_on_timeout': True,'concurrent_requests': 32,'queue_size': 512
}

Spider 基类关键方法介绍

注意

安装

示例

from xcrawler import CrawlerProcess
from xcrawler.spider import BaseSpider,Request
from lxml.html import fromstring
import json
__version__ = '0.0.1'
__author__ = 'Chris'
class BaiduNewsSpider(BaseSpider):
 name = 'baidu_news_spider'
 start_urls = ['http://news.baidu.com/']
 default_headers = {
 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) '
 'Chrome/50.0.2661.102 Safari/537.36'
 }
 def spider_started(self):
 self.file = open('items.jl','w')
 def spider_stopped(self):
 self.file.close()
 def spider_idle(self):
 # 引擎空闲时,你也可以从数据库提取新的 URL 进来
 print('I am in idle mode')
 # self.crawler.crawl(new_request,spider=self)
 def make_requests_from_url(self,url):
 return Request(url,headers=self.default_headers)
 def parse(self,response):
 root = fromstring(response.content,base_url=response.base_url)
 for element in root.xpath('//a[@target="_blank"]'):
 title = self._extract_first(element,'text()')
 link = self._extract_first(element,'@href').strip()
 if title:
 if link.startswith('http://') or link.startswith('https://'):
 yield {'title': title,'link': link}
 yield Request(link,headers=self.default_headers,callback=self.parse_news,Meta={'title': title})
 def parse_news(self,response):
 pass
 def process_item(self,item):
 print(item)
 print(json.dumps(item,ensure_ascii=False),file=self.file)
 @staticmethod
 def _extract_first(element,exp,default=''):
 r = element.xpath(exp)
 if len(r):
 return r[0]
 return default
def main():
 settings = {
 'download_delay': 1,'concurrent_requests': 16,'queue_size': 512
 }
 crawler = CrawlerProcess(settings,'DEBUG')
 crawler.crawl(BaiduNewsSpider)
 crawler.start()
if __name__ == '__main__':
 main()

百度爬虫工程师教你只用500行Python代码构建一个轻量级爬虫框架

百度爬虫工程师教你只用500行Python代码构建一个轻量级爬虫框架

版权声明

总结

以上是编程之家为你收集整理的百度爬虫工程师教你只用500行Python代码构建一个轻量级爬虫框架全部内容,希望文章能够帮你解决百度爬虫工程师教你只用500行Python代码构建一个轻量级爬虫框架所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶