scrapy 爬虫中间件爬取百度首页
时间: 2023-07-12 19:03:44 浏览: 188
好的,这里提供一个通过 Scrapy 中间件爬取百度首页的示例代码。
1. 创建 Scrapy 项目
```
scrapy startproject baidu
cd baidu
```
2. 创建爬虫文件
```
scrapy genspider baidu_spider www.baidu.com
```
3. 编写中间件
在 `middlewares.py` 文件中编写中间件代码,如下所示:
```python
from scrapy import signals
from scrapy.http import HtmlResponse
from selenium import webdriver
class BaiduDownloaderMiddleware:
def __init__(self):
self.driver = webdriver.Chrome()
def process_request(self, request, spider):
self.driver.get(request.url)
html = self.driver.page_source
return HtmlResponse(url=request.url, body=html.encode('utf-8'), encoding='utf-8', request=request)
def __del__(self):
self.driver.quit()
```
这里使用了 Selenium 和 ChromeDriver 来模拟浏览器访问百度首页,并将返回的页面源码封装成 HtmlResponse 类型,传递给爬虫进行解析。
4. 在 settings.py 文件中启用中间件
```python
DOWNLOADER_MIDDLEWARES = {
'baidu.middlewares.BaiduDownloaderMiddleware': 543,
}
```
5. 编写爬虫代码
```python
import scrapy
class BaiduSpider(scrapy.Spider):
name = 'baidu_spider'
start_urls = ['https://www.baidu.com']
def parse(self, response):
title = response.xpath('//title/text()').get()
print(title)
```
6. 运行爬虫
```
scrapy crawl baidu_spider
```
运行爬虫后,可以看到输出了百度首页的标题。
需要注意的是,由于百度首页有反爬机制,如果使用普通的 requests 或者 scrapy 爬虫访问,可能会被拦截。这里使用了 Selenium 和 ChromeDriver 来模拟浏览器访问,可以规避这个问题。
阅读全文