首先执行命令pip install Scrapy进行安装。请求超时,多试几次或者换成国内的源。如果还装不上,装下老版本:pip install scrapy==1.5.1
制作Scrapy爬虫有以下几个步骤:
-
(1)创建项目
在想创建项目的目录下输入cmd,然后执行命令:scrapy startproject TencentNews(表示项目名称)
创建完成之后,TencentNews项目的目录如下:
- items.py
用来定义变量,变量用于存储从网页提取的数据(即明确你想要抓取的目标 ) - pipelines.py
主要是把你从网页提取出来的数据,存储到item之后,后续把这些变量数据进行存储(可以存储在文本文件或者excel文件或者数据库) - setting.py
(a)注释掉下面的三句代码,表示指定抓取的优先级(默认是注释的,需要取消注释)
#ITEM_PIPELINES = {
# 'project1.pipelines.Project1Pipeline': 300,
#}
(b)下面表示设定抓取的并发量,默认的16,不需要取消注释(如果要改成其他的并发量,需要取消注释)
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
-
(2)创建spider目录下的spider
cmd进入到项目的根目录下(\TencentNews\TencentNews(第二个TencentNews是根目录),生成两个TencentNews是框架自带的),执行以下命令:scrapy genspider tencent(spider名字) www.qq.com(网址),创建一个spider,生成的spider如下:
网页下载后,从网页源码要提取哪些数据是tentcent.py文件决定的,然后决定存到哪个变量(items.py文件中定义的变量)里。
-
(3)循环抓取腾讯网的新闻例子中各个Python文件逻辑
下面开始具体修改Python文件里的代码
(a)修改item.py中的代码(设定存腾讯网的哪些信息,类似于{url:xxx,title:xxx,h1:xxx,text:xxxx}这样字典结构的item)
item.py中默认的代码如下:
import scrapy
class TencentnewsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
pass
import scrapy
class TencentnewsItem(scrapy.Item):
"""这个类是框架自带的"""
URL = scrapy.Field() #定义存放当前网页地址的变量
TITLE = scrapy.Field() #定义存放当前网页title的变量
H1 = scrapy.Field() #定义存放一级标题的变量
TEXT = scrapy.Field() #定义存放正文的变量
(b)修改spider/tencent.py中的代码(从网页中提取抓取内容的逻辑)
tencent.py中默认的代码如下:
import scrapy
class TencentSpider(scrapy.Spider):
name = 'tencent'
allowed_domains = ['www.qq.com']
start_urls = ['http://www.qq.com/']
def parse(self, response):
pass
修改后的代码如下:
# -*- coding: utf-8 -*-
import scrapy
import re,os,sys
from TencentNews.items import TencentnewsItem
from scrapy import Request
#在文件主目录下执行抓取:scrapy crawl tencent
class Tenc