安装Python扩展库scrapy,然后编写爬虫项目,从网站 http://www.weather.com.cn/henan/index.shtml 爬取河南各城市的天气预报数据,并把爬取到的天气数据写入本地文本文件 weather.csv。
时间: 2024-12-23 16:23:11 浏览: 30
安装Python扩展库Scrapy的过程可以分为以下几个步骤:
1. **安装Scrapy**:
首先,你需要确保已经安装了Python。如果没有,你可以访问https://www.python.org/downloads/ 下载并安装。然后,在命令行中运行以下命令来安装Scrapy(如果你使用的是虚拟环境,记得激活它):
```
pip install scrapy
```
2. **创建Scrapy项目**:
创建一个新的Scrapy项目可以用下面的命令:
```
scrapy startproject weather_spider
```
这将创建一个名为`weather_spider`的目录,其中包含了Scrapy的基本结构。
3. **配置Scrapy**:
进入项目目录,打开`settings.py`文件,设置默认下载器为你想要使用的(例如`requests`),同时启用CSV存储中间件,以便将数据保存到CSV文件中:
```python
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 850,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
'scrapy.middleware.redirect.RedirectMiddleware': 930,
'scrapy_csv.CSVStoreMiddleware': 700,
}
ITEM_PIPELINES = {'weather_spider.pipelines.WeatherPipeline': 300}
```
4. **定义Item和Pipeline**:
在`items.py`中定义一个`WeatherInfo`类,用于存储天气数据。在`pipelines.py`中,创建一个`WeatherPipeline`来保存数据到CSV文件:
```python
# items.py
import scrapy
class WeatherInfo(scrapy.Item):
city = scrapy.Field()
temperature = scrapy.Field()
...
# pipelines.py
from scrapy_csv import UnicodeWriter
from .items import WeatherInfo
class WeatherPipeline:
def __init__(self):
self.file = open('weather.csv', 'w', encoding='utf-8')
self.writer = UnicodeWriter(self.file)
def process_item(self, item, spider):
row = [item['city'], item['temperature'], ...]
self.writer.writerow(row)
return item
def close_spider(self, spider):
self.file.close()
```
5. **编写Spider**:
在`spiders`目录下新建一个`weather_spider.py`文件,编写爬虫代码来解析网页并提取数据。这里是一个基础的示例,实际需要分析HTML结构:
```python
# spiders/weather_spider.py
import scrapy
from weather_spider.items import WeatherInfo
class WeatherSpider(scrapy.Spider):
name = 'weather_spider'
allowed_domains = ['www.weather.com.cn']
start_urls = ['http://www.weather.com.cn/henan/index.shtml']
def parse(self, response):
# 使用BeautifulSoup或其他解析库解析HTML
city_data = response.css('...') # 根据页面结构选择城市信息元素
for city in city_data:
city_name = city.css('..::text').get() # 获取城市名
temp = city.css('.temp::text').get() # 获取温度等信息
yield WeatherInfo(city=city_name, temperature=temp, ...)
```
6. **运行爬虫**:
最后,在命令行中进入项目根目录,运行以下命令来开始爬取:
```
scrapy crawl weather_spider
```
爬虫运行完成后,你会看到`weather.csv`文件生成在项目的`data`目录下,包含着抓取到的天气数据。
阅读全文