2、爬取百度指定关键字(如“郑州大学”)搜索结果前十页信息,结果保存到文件中search.csv中。(使用scrapy
时间: 2024-12-17 07:56:06 浏览: 9
要使用Scrapy框架爬取百度指定关键字搜索结果并保存到CSV文件中,你需要首先安装Scrapy库,然后创建一个新的Scrapy项目,并编写爬虫逻辑。以下是一个基本步骤概述:
1. **安装Scrapy**:
```bash
pip install scrapy
```
2. **创建Scrapy项目**:
```bash
scrapy startproject baidu_search
cd baidu_search
```
3. **设置`settings.py`文件**:
在`settings.py`中配置下载器中间件,允许访问百度等搜索引擎:
```python
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'your_project.middlewares.RandomUserAgentMiddleware': 400,
}
```
然后添加自定义用户代理中间件(RandomUserAgentMiddleware),用于模拟浏览器头。
4. **创建爬虫**:
在`spiders`目录下新建一个爬虫文件(如`baidusearch.py`),编写以下基本爬虫逻辑:
```python
import scrapy
from bs4 import BeautifulSoup
from your_project.items import BaiduSearchItem
class BaiduSearchSpider(scrapy.Spider):
name = 'baidu_search'
allowed_domains = ['www.baidu.com']
start_urls = ['https://www.baidu.com/s?wd=' + '郑州大学']
def parse(self, response):
soup = BeautifulSoup(response.text, 'lxml')
items = soup.find_all('div', {'class': 'c-container'})
for item in items[:10]: # 获取前10个结果
title = item.find('h3').text
link = item.find('a')['href']
description = item.find('span', {'class': 'st'}).text if item.find('span', {'class': 'st'}) else ''
yield BaiduSearchItem(title=title, link=link, description=description)
def closed(self, reason):
with open('search.csv', 'w', encoding='utf-8') as f:
self.file_writer = csv.writer(f)
self.file_writer.writerow(['Title', 'Link', 'Description'])
for item in self.log_storage['items']:
self.file_writer.writerow([item['title'], item['link'], item['description']])
```
这里假设你已经有一个名为`your_project`的文件夹,并定义了一个名为`BaiduSearchItem`的Item类,包含标题、链接和描述字段。
5. **运行爬虫**:
```bash
scrapy crawl baidu_search
```
运行后,爬虫将开始工作并把结果保存到当前目录下的`search.csv`文件中。
6. **注意**:
- 百度可能有反爬机制,使用Scrapy时需要遵守其robots.txt规则,并尽可能设置延迟以避免过于频繁的请求。
- 郑州大学可能会动态加载更多结果,这里只抓取了初始10个静态结果,如果需要获取所有结果可能需要更复杂的逻辑或者使用selenium等工具。
阅读全文