Python爬虫
Scrapy
## 1. 爬虫方法 start_requests() 生成初始请求,可以自定义请求头、请求方法等。 yield scrapy.Request(url, callback=self.parse) parse(response) 处理响应并提取数据,是爬虫的核心方法。 yield {'title': response.css('h1::text').get()} follow(url, callback) 自动处理相对 URL 并生成新的请求,用于分页或链接跳转。 yield response.follow(next_page, callback=self.parse) closed(reason) 爬虫关闭时调用,用于清理资源或记录日志。 def closed(self, reason): print('Spider closed:', reason) log(message) 记录日志信息。 self.log('This is a log message') ## 2. 数据提取方法 response.css(selector) 使用 CSS 选择器提取数据。 title = response.css('h1::text').get() response.xpath(selector) 使用 XPath 选择器提取数据。 title = response.xpath('//h1/text()').get() get() 从 SelectorList 中提取第一个匹配的结果(字符串)。 title = response.css('h1::text').get() getall() 从 SelectorList 中提取所有匹配的结果(列表)。 titles = response.css('h1::text').getall() attrib 提取当前节点的属性。 link = response.css('a::attr(href)').get() ## 3. 请求与响应方法 scrapy.Request(url, callback, method, headers, meta) 创建一个新的请求。 yield scrapy.Request(url, callback=self.parse, headers=headers) response.url 获取当前响应的 URL。 current_url = response.url response.status 获取响应的状态码。 if response.status == 200: print('Success') response.meta 获取请求中传递的额外数据。 value = response.meta.get('key') response.headers 获取响应的头信息。 content_type = response.headers.get('Content-Type') ## 4. 中间件与管道方法 process_request(request, spider) 在请求发送前处理请求(下载器中间件)。 request.headers['User-Agent'] = 'Mozilla/5.0' process_response(request, response, spider) 在响应返回后处理响应(下载器中间件)。 if response.status == 403: return request.replace(dont_filter=True) process_item(item, spider) 处理提取的数据(管道)。 if item['price'] < 0: raise DropItem('Invalid price') open_spider(spider) 爬虫启动时调用(管道)。 def open_spider(self, spider): self.file = open('items.json', 'w') close_spider(spider) 爬虫关闭时调用(管道)。 def close_spider(self, spider): self.file.close() ## 5. 工具与扩展方法 scrapy shell 启动交互式 Shell,用于调试和测试选择器。 scrapy shell 'http://example.com' scrapy crawl <spider_name> 运行指定的爬虫。 scrapy crawl myspider -o output.json scrapy check 检查爬虫代码的正确性。 scrapy check scrapy fetch 下载指定 URL 的内容。 scrapy fetch 'http://example.com' scrapy view 在浏览器中查看 Scrapy 下载的页面。 scrapy view 'http://example.com' ## 6. 常用设置(settings.py) USER_AGENT 设置请求头中的 User-Agent。 USER_AGENT = 'Mozilla/5.0' ROBOTSTXT_OBEY 是否遵守 robots.txt 规则。 ROBOTSTXT_OBEY = False DOWNLOAD_DELAY 设置下载延迟,避免过快请求。 DOWNLOAD_DELAY = 2 CONCURRENT_REQUESTS 设置并发请求数。 CONCURRENT_REQUESTS = 16 ITEM_PIPELINES 启用管道。 ITEM_PIPELINES = {'myproject.pipelines.MyPipeline': 300} AUTOTHROTTLE_ENABLED 启用自动限速扩展。 AUTOTHROTTLE_ENABLED = True ## 7. 其他常用方法 response.follow_all(links, callback) 批量处理链接并生成请求。 yield from response.follow_all(links, callback=self.parse) response.json() 将响应内容解析为 JSON 格式。 data = response.json() response.text 获取响应的文本内容。 html = response.text response.selector 获取响应内容的 Selector 对象。 title = resp ## Scrapy架构图 Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。 Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。 Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理, Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器). Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。 Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。 Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests) ## 制作 Scrapy 爬虫 一共需要4步: 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目 明确目标 (编写items.py):明确你想要抓取的目标 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页 存储内容 (pipelines.py):设计管道存储爬取内容 ## 安装 pip install Scrapy sudo pip install scrapy pip install --upgrade pip sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
顶部
收展
底部
[TOC]
目录
requests
BeautifulSoup
selenium
Scrapy
相关推荐
Python3基础教程