Python|使用 scrapy 框架爬取山东各城市天气预报
实验内容:
安 装 Python 扩 展 库 scrapy , 然 后 编 写 爬 虫 项 目 , 从 网 站 http://www.weather.com.cn/shandong/index.shtml 爬取山东各城市的天气预报数 据,并把爬取到的天气数据写入本地文本 weather.txt。
实验步骤:
- 在命令提示符环境使用 pip install scrapy 命令安装 Python 扩展库 scrapy。 2. 在命令提示符环境使用 scrapy startproject sdWeatherSpider 创建爬虫项目。 3. 进入爬虫项目文件夹,然后执行命令 scrapy genspider everyCityinSD.py www.weather.com.cn 创建爬虫程序。 4. 使用浏览器打开网址 http://www.weather.com.cn/shandong/index.shtml, 找到下面位置
实验步骤: - 在命令提示符环境使用 pip install scrapy 命令安装 Python 扩展库 scrapy。
- 在命令提示符环境使用 scrapy startproject sdWeatherSpider 创建爬虫项目。
- 进入爬虫项目文件夹,然后执行命令 scrapy genspider everyCityinSD.py www.weather.com.cn 创建爬虫程序。
- 使用浏览器打开网址 http://www.weather.com.cn/shandong/index.shtml, 找到下面位置
5.在页面上单击鼠标右键,选择“查看网页源代码”,然后找到与“城市预报列表”对应的位置。
6.选择并打开山东省内任意城市的天气预报页面,此处以烟台为例。
7.在页面上单击鼠标右键,选择“查看网页源代码”,找到与上图中天气预报相对应的位置。
8.修改items.py文件,定义要爬取的内容。
import scrapy
class SdweatherspiderItem(scrapy.Item):
#definethefieldsforyouritemherelike:
#name=scrapy.Field()
city=scrapy.Field()
weather=scrapy.Field()
- 修改爬虫文件 everyCityinSD.py,定义如何爬取内容,其中用到的规则参考前面 对页面的分析,如果无法正常运行,有可能是网页结构有变化,可以回到前面的步骤重新 分析网页源代码。
from re import findall
from urllib.request import urlopen
import scrapy
from sdWeatherSpider.items import SdweatherspiderItem
class EverycityinsdSpider(scrapy.Spider):
name = 'everyCityinSD'
allowed_domains = ['www.weather.com.cn']
start_urls = []
# 遍历各城市,获取要爬取的页面
URL url = r'http://www.weather.com.cn/shandong/index.shtml'
with urlopen(url) as fp:
contents = fp.read().decode()
pattern = '<a title=".*?" href="https://blog.csdn.net/shmilylqd/article/details/(. ?)" target="_blank">(. ?)</a>'
for url in findall(pattern, contents):
start_urls.append(url[0])
def parse(self, response):
# 处理每个城市的天气预报页面数据
item = SdweatherspiderItem()
city = response.xpath('//div[@class="crumbs fl"]//a[2]//text()').extract()[0]
item['city'] = city
# 每个页面只有一个城市的天气数据,直接取[0]
selector = response.xpath('//ul[@class="t clearfix"]')[0] # 存放天气数据
weather = ''
for li in selector.xpath('./li'):
date = li.xpath('./h1//text()').extract()[0]
cloud = li.xpath('./p[@title]//text()').extract()[0]
high = li.xpath('./p[@class="tem"]//span//text()').extract()[0]
low = li.xpath('./p[@class="tem"]//i//text()').extract()[0]
wind = li.xpath('./p[@class="win"]//em//span[1]/@title').extract()[0]
wind = wind li.xpath('./p[@class="win"]//i//text()').extract()[0]
weather = weather date ':' cloud ',' high r'/' low ',' wind '\n'
item['weather'] = weather
return [item]
10. 修改 pipelines.py 文件,把爬取到的数据写入文件 weather.txt。
class SdweatherspiderPipeline(object):
def process_item(self, item, spider):
with open('weather.txt', 'a', encoding='utf8') as fp:
fp.write(item['city'] '\n')
fp.write(item['weather'] '\n\n')
return item
- 修改 settings.py 文件,分派任务,指定处理数据的程序。
BOT_NAME = 'sdWeatherSpider'
SPIDER_MODULES = ['sdWeatherSpider.spiders']
NEWSPIDER_MODULE = 'sdWeatherSpider.spiders'
ITEM_PIPELINES = { 'sdWeatherSpider.pipelines.SdweatherspiderPipeline':1, }
- 切换到命令提示符环境,执行 scrapy crawl everyCityinSD 命令运行爬虫程序。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfihcag
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24