Scrapy爬取天气网站历史数据

基础部分

1.创建Scrapy项目

命令行界面 **scrapy startproject 项目名称**就会在当前目录下创建该爬虫项目

2.创建爬虫项目

通过**cd 项目名称进入项目后
使用
scrapy genspider 爬虫项目名称 网站域名(后期可改)**命令创建该爬虫(一个项目可以创建多个爬虫)

3.运行爬虫

1.命令行界面**scrapy crawl 爬虫项目名称**
2.在该项目下创建.py文件,这样每次运行爬虫只需要运行此脚本即可(文件内容)

from scrapy import cmdline
# 方式一:使用split()方法将字符串分隔成 方式二( (可选)--nolog:设置为无日志输出)
cmdline.execute("scrapy crawl 爬虫项目名称 --nolog".split())
# 方式二:注意execute的参数类型为一个列表
cmdline.execute(["scrapy","crawl","爬虫项目名称"])

4.爬虫各部分作用浅谈

image.png



项目

爬虫项目

# -*- coding: utf-8 -*-

import scrapy
from scrapy.selector import Selector
from MySpider.items import TianqiListItem # items中的类名
import  time
import random
import json
import copy
import pymysql
import pymysql.cursors

class TianqiSpider(scrapy.Spider):
    name = "TianqiSpider"
    allowed_domains = ["tianqi.com"]
    
    # 传入初始网页,多个网址可以使用列表加循环实现
    def start_requests(self):
        url = "https://lishi.tianqi.com/"
        yield scrapy.Request(url, callback=self.parse1)

	# 此部分需另外调用
    def create_mysql(self):
        """在数据库中创建表"""
        # 填写数据库用户名、数据库名、数据库用户密码、数据库url
        connect = pymysql.connect(user='root', db='weather_db', passwd='123456',
                                       host='127.0.0.1', charset="utf8", use_unicode=True)
        # 获取游标
        cursor = connect.cursor()
        # 通过如果表存在则删除
        # self.cursor.execute("DROP TABLE IF EXISTS data_table")
        # 创建表
        cursor.execute("CREATE TABLE weather_data (地名 CHAR(20),年月 CHAR(20),时间 CHAR(20),最高温度 int,最低温度 int,天气 CHAR(20),风向 CHAR(20),风速 CHAR(20),风向风速 CHAR(20),补充信息 CHAR(50),地方网址 CHAR(200),月份网址 CHAR(200),当天网址 CHAR(200))")
        cursor.close()
        # time.sleep(10)


    def parse4(self, response):
        """调用本地文件中的内容数据"""
        data_item = TianqiListItem()
        dataJson = json.load(open("C:/Users/Yin/Desktop/Program/数据/data_table.json", "r", encoding='UTF-8'))
        for each in dataJson:
            data_item['url1'] = each["地方网址"]
            data_item['data1'] = each["地名"]
            data_item['url2'] = each["月份网址"]
            data_item['data2'] = each["年月"]
            # 随机休眠躲避反爬
            time.sleep(random.uniform(1, 3))
            yield scrapy.Request(url=each["url2"], meta={'data_item':copy.deepcopy(data_item)},
                                 callback=self.parse3,
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值