Python|使用 scrapy 框架爬取山东各城市天气预报

实验内容:
安 装 Python 扩 展 库 scrapy , 然 后 编 写 爬 虫 项 目 , 从 网 站 http://www.weather.com.cn/shandong/index.shtml 爬取山东各城市的天气预报数 据,并把爬取到的天气数据写入本地文本 weather.txt。
实验步骤:

  1. 在命令提示符环境使用 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, 找到下面位置
    实验步骤:
  2. 在命令提示符环境使用 pip install scrapy 命令安装 Python 扩展库 scrapy。
  3. 在命令提示符环境使用 scrapy startproject sdWeatherSpider 创建爬虫项目。
  4. 进入爬虫项目文件夹,然后执行命令 scrapy genspider everyCityinSD.py www.weather.com.cn 创建爬虫程序。
  5. 使用浏览器打开网址 http://www.weather.com.cn/shandong/index.shtml, 找到下面位置
    Python|使用 scrapy 框架爬取山东各城市天气预报
    Python|使用 scrapy 框架爬取山东各城市天气预报
    6.选择并打开山东省内任意城市的天气预报页面,此处以烟台为例。
    Python|使用 scrapy 框架爬取山东各城市天气预报
    7.在页面上单击鼠标右键,选择”查看网页源代码”,找到与上图中天气预报相对应的位置。
    Python|使用 scrapy 框架爬取山东各城市天气预报
    8.修改items.py文件,定义要爬取的内容。
import scrapy
class SdweatherspiderItem(scrapy.Item):

       city=scrapy.Field()
       weather=scrapy.Field()
  1. 修改爬虫文件 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 = '(.+?)'
    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

    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
  1. 修改 settings.py 文件,分派任务,指定处理数据的程序。
BOT_NAME = 'sdWeatherSpider'
SPIDER_MODULES = ['sdWeatherSpider.spiders']
NEWSPIDER_MODULE = 'sdWeatherSpider.spiders'
ITEM_PIPELINES = { 'sdWeatherSpider.pipelines.SdweatherspiderPipeline':1, }
  1. 切换到命令提示符环境,执行 scrapy crawl everyCityinSD 命令运行爬虫程序。

Original: https://blog.csdn.net/shmilylqd/article/details/125740111
Author: cw11lq
Title: Python|使用 scrapy 框架爬取山东各城市天气预报

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/729865/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球