使用scrapy爬取某城市天气预报 编写爬虫项目,从https://www.tianqi.com网站爬取某城市(自选)的天气预报数据,并把爬取到的天气数据写入本地文本文件weather.txt。 提示: (1)安装Python扩展库scrapy,创建爬虫项目,将需要获取的字段名填写进去; (2)将爬取到的数据写入文件weather.txt;
时间: 2024-04-01 10:34:59 浏览: 156
python的scrapy框架爬取天气预报
好的,我知道了。首先,我们需要安装Scrapy库,可以使用以下命令进行安装:
```
pip install scrapy
```
安装完成后,我们可以使用以下命令创建一个Scrapy项目:
```
scrapy startproject weather
```
其中,weather是我们指定的项目名称。
接下来,我们需要进入到项目目录,并创建一个Spider:
```
cd weather
scrapy genspider city_weather tianqi.com
```
其中,city_weather是我们指定的Spider名称,tianqi.com是我们要爬取的网站。
打开生成的Spider文件,我们可以看到以下代码:
```python
import scrapy
class CityWeatherSpider(scrapy.Spider):
name = 'city_weather'
allowed_domains = ['tianqi.com']
start_urls = ['http://tianqi.com/']
def parse(self, response):
pass
```
在这里,我们需要填写我们要爬取的城市的URL,修改start_urls为:
```python
start_urls = ['http://tianqi.com/beijing/']
```
接下来,我们需要定义我们要爬取的字段,包括日期、天气、温度等等。我们可以在parse函数中使用XPath或CSS选择器来提取数据,并将其存储到一个字典中:
```python
def parse(self, response):
date = response.xpath('//div[@class="day"]/ul/li/h1/text()')[0]
weather = response.xpath('//div[@class="wea"]/text()')[0]
temp = response.xpath('//div[@class="tem"]/span/text()')
temp_max = temp[0]
temp_min = temp[1]
item = {
'date': date,
'weather': weather,
'temp_max': temp_max,
'temp_min': temp_min
}
yield item
```
最后,我们需要将爬取到的数据存储到本地文件中。我们可以在settings.py中添加以下代码:
```python
FEED_FORMAT = 'json'
FEED_URI = 'weather.json'
```
其中,FEED_FORMAT指定了存储格式(这里是JSON),FEED_URI指定了存储的文件名。
最终的Spider代码如下:
```python
import scrapy
class CityWeatherSpider(scrapy.Spider):
name = 'city_weather'
allowed_domains = ['tianqi.com']
start_urls = ['http://tianqi.com/beijing/']
def parse(self, response):
date = response.xpath('//div[@class="day"]/ul/li/h1/text()')[0]
weather = response.xpath('//div[@class="wea"]/text()')[0]
temp = response.xpath('//div[@class="tem"]/span/text()')
temp_max = temp[0]
temp_min = temp[1]
item = {
'date': date,
'weather': weather,
'temp_max': temp_max,
'temp_min': temp_min
}
yield item
```
运行爬虫:
```
scrapy crawl city_weather
```
运行完成后,我们可以看到在项目目录下生成了一个weather.json文件,其中包含了爬取到的天气数据。如果需要将数据存储到文本文件中,可以将FEED_FORMAT修改为'csv',并将FEED_URI修改为'weather.txt'。
阅读全文