Python3网络爬虫——(5)Scrapy爬虫基础

目录

1、Scrapy常用命令行

2、Scrapy爬取内容

3、Scrapy数据提取

4、Scrapy爬取中国大陆明星

5、12306火车站站名爬取


1、Scrapy常用命令行

  • scrapy startproject QuotesSpider           #创建项目

  • scrapy crawl XX                  #运行XX蜘蛛

  • scrapy shell http://www.scrapyd.cn                     #调试网址为http://www.scrapyd.cn的网站

  • scrapy version                 #查看版本

  • scrapy list                #显示有多少个蜘蛛

2、Scrapy爬取内容

 #scrapy爬取 http://lab.scrapyd.cn 中的名言内容、作者、标签

import scrapy
​
class QuoteSpider(scrapy.Spider):   # #需要继承scrapy.Spider类
    name = 'mingyan'  #定义蜘蛛名
    # 定义爬取的链接
    #start_urls = ['http://lab.scrapyd.cn/page/1/',]
    start = 1
    end = 50
    start_urls = ('http://lab.scrapyd.cn/page/' + str(i) + '/' for i in range(1, end))
​
    # 通过链接爬取页面,定义规则提取数据
    def parse(self, response):
        mingyan = response.css('div.quote')  # 提取首页所有名言,保存至变量mingyan
​
        for v in mingyan:  # 循环获取每一条名言里面的:名言内容、作者、标签
            text = v.css('.text::text').extract_first()  # 提取名言
            autor = v.css('.author::text').extract_first()  # 提取作者
            tags = v.css('.tags .tag::text').extract()  # 提取标签
            tags = ','.join(tags)  # 数组转换为字符串
            """
            接下来进行写文件操作,每个名人的名言储存在一个txt文档里面
            """
            fileName = '%s-语录.txt' % autor  # 定义文件名,如:木心-语录.txt
​
            with open(fileName, "a+") as f:  # 不同人的名言保存在不同的txt文档,“a+”以追加的形式
                f.write(text)
                f.write('\n')  # ‘\n’ 表示换行
                f.write('标签:' + tags)
                f.write('\n-------\n')
                f.close()

3、Scrapy数据提取

  • xpath选择器

  • css选择器

4、Scrapy爬取中国大陆明星

import scrapy
#中国大陆明星姓名爬取
class itemSpider(scrapy.Spider):
    name = 'starname'
    start_urls = ['http://www.manmankan.com/dy2013/mingxing/neidi/#']
    def parse(self, response):
        for i in range(1,27):
            name_list=response.css('div.i_cont_s')[i].xpath('./a/@title').extract()
            with open('data/name_list','a+') as f:
                for name in name_list:
                    f.write(str(name)+'\n')

5、12306火车站站名爬取

import requests
import re

def getStation():
    # 12306的火车站名和代码js文件url
    url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9018'
    r = requests.get(url, verify=False)
    pattern = u'([\u4e00-\u9fa5]+)\|([A-Z]+)'
    result = re.findall(pattern, r.text)
    station = dict(result)
    return station
file=open('data/railway_station','w')
stations=getStation()
stations_list=[]
for key,value in stations.items():
    stations_list.append(key)
    file.write(str(key)+'\n')
file.close()

 

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页