当前位置 博文首页 > Asia-Lee:Python3网络爬虫——(5)Scrapy爬虫基础

    Asia-Lee:Python3网络爬虫——(5)Scrapy爬虫基础

    作者:[db:作者] 时间:2021-09-07 16:42

    目录

    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()
    

    ?

    cs
    下一篇:没有了