基础部分
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.爬虫各部分作用浅谈
项目
爬虫项目
# -*- 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,