Scrapy实例————爬取学堂在线合作院校页面内容

目标

通过Scrapy爬取到合作院校的名称及该所院校在学堂在线开课的数量,将爬取到的数据保存到一个json文件中,例如:“清华大学,308”,地址 http://www.xuetangx.com/partners 。

环境

博主是在Windows平台使用PyCharm基于Python 3.7Scrapy 2.0.1编写爬虫,不赘述环境配置了。

建立项目

右键Scrapy文件夹,选择在终端中打开
在这里插入图片描述
在终端中输入scrapy startproject xtzx,其中xtzx为项目名(忽略图中lianjia,只是博主懒得再重新截图了,下同)。

新建begin.py

在这里插入图片描述
在项目文件夹中新建begin.py,内容为:

from scrapy import cmdline
cmdline.execute("scrapy crawl xtzx".split())

其中xtzx为爬虫名(无须与项目名相同)。目的是为了方便运行爬虫。否则,需要在终端手动输入scrapy crawl xtzx来运行

更改items.py

import scrapy
class MyItem (scrapy.Item):
    school = scrapy.Field()
    num = scrapy.Field()

分析网页

右键爬取内容,检查,以下以school为例讲解。
复制三个school的xpath路径,不难找到规律。

/html/body/article[1]/section/ul/li[1]/a/div[2]/h3
/html/body/article[1]/section/ul/li[2]/a/div[2]/h3
/html/body/article[1]/section/ul/li[3]/a/div[2]/h3

新建并更改spider.py

spider文件夹中新建spider.py,并键入:

import scrapy
from xtzx.items import MyItem
class mySpider(scrapy.spiders.Spider):
    name = "xtzx"
    allowed_domains = ["xuetangx.com"]
    start_urls = ["http://www.xuetangx.com/partners"]
    def parse(self, response):
        item = MyItem ()
        #开课院校
        for each in response.xpath("/html/body/article[1]/section/ul/*"): 
            item['school'] = each.xpath("a/div[2]/h3/text()").extract()
            item['num'] = each.xpath("a/div[2]/p/text()").extract()
            yield item 
        #edX合作院校和伙伴
        for each in response.xpath("/html/body/article[2]/section/ul/*"): 
            item['school'] = each.xpath("a/div[2]/h3/text()").extract()
            item['num'] = each.xpath("a/div[2]/p/text()").extract()
            yield(item) 

更改setting.py

#不遵守机器人协议
ROBOTSTXT_OBEY = False
BOT_NAME = 'xtzx'
SPIDER_MODULES = ['xtzx.spiders']
NEWSPIDER_MODULE = 'xtzx.spiders'
#开启管道
ITEM_PIPELINES = {'xtzx.pipelines.MyPipeline': 300,}
#客户端伪装
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'

更改pipelines.py

import json
class MyPipeline (object):
    #打开文件
    def open_spider (self,spider):
        try:
            self.file = open('MyData.json ', "w", encoding="utf-8")
        except Exception as err:
            print(err)
    #写入
    def process_item (self, item, spider):
        dict_item = dict (item)
        # 生成 json 串
        json_str = json.dumps(dict_item , ensure_ascii=False) + "\n" 
        self.file.write(json_str)
        return item
    #关闭文件
    def close_spider (self,spider):
        self.file.close()

运行爬虫

运行begin.py,成功爬取到数据。这里只列举部分数据。

{"school": ["清华大学"], "num": ["31门课程"]}
{"school": ["台湾清华大学"], "num": ["0门课程"]}
{"school": ["台湾交通大学"], "num": ["0门课程"]}
{"school": ["斯坦福大学"], "num": ["0门课程"]}
{"school": ["中央社会主义学院"], "num": ["0门课程"]}
{"school": ["西安交通大学"], "num": ["16门课程"]}
{"school": ["中南财经政法大学"], "num": ["3门课程"]}
{"school": ["复旦大学"], "num": ["0门课程"]}
{"school": ["北京理工大学"], "num": ["0门课程"]}
{"school": ["中国科学技术大学"], "num": ["0门课程"]}

交流讨论等具体内容请访问我的博客

原文地址:https://www.boyinthesun.cn/post/python-scrapy1/

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
好的,我可以为您提供爬虫教程,以下是使用Scrapy框架爬取豆瓣电影TOP250的步骤: 1. 创建Scrapy项目 首先需要使用Scrapy命令行工具创建一个Scrapy项目,可以使用以下命令: ``` scrapy startproject douban_top250 ``` 该命令将会在当前目录下创建一个名为douban_top250的Scrapy项目。 2. 创建Spider 接下来需要创建一个Spider来定义爬取的规则,可以使用以下命令在Scrapy项目的spiders目录下创建一个名为douban_spider的Spider: ``` scrapy genspider douban_spider movie.douban.com ``` 在spiders目录下会生成一个名为douban_spider.py的文件,我们可以在该文件中定义爬取规则。 3. 编写Spider规则 在douban_spider.py文件中,我们需要定义如何爬取豆瓣电影TOP250的规则,以下是一个简单的例子: ```python import scrapy from scrapy import Selector from douban_top250.items import DoubanTop250Item class DoubanSpider(scrapy.Spider): name = "douban_spider" allowed_domains = ["movie.douban.com"] start_urls = [ "https://movie.douban.com/top250" ] def parse(self, response): selector = Selector(response) item_list = selector.xpath('//ol[@class="grid_view"]/li') for item in item_list: douban_item = DoubanTop250Item() douban_item['rank'] = item.xpath('div[@class="pic"]/em/text()').extract()[0] douban_item['title'] = item.xpath('div[@class="info"]/div[@class="hd"]/a/span[@class="title"]/text()').extract()[0] douban_item['rating'] = item.xpath('div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()[0] douban_item['quote'] = item.xpath('div[@class="info"]/div[@class="bd"]/p[@class="quote"]/span[@class="inq"]/text()').extract()[0] yield douban_item ``` 在上述代码中,我们定义了一个名为DoubanSpider的Spider,并定义了一些爬取规则: - allowed_domains:定义允许爬取的域名; - start_urls:定义爬虫开始爬取的URL列表; - parse:定义如何解析响应结果,生成Item对象。 4. 定义Item 在上述代码中,我们定义了一个名为DoubanTop250Item的Item,需要在douban_top250/items.py文件中定义该Item,以下是一个简单的例子: ```python import scrapy class DoubanTop250Item(scrapy.Item): rank = scrapy.Field() title = scrapy.Field() rating = scrapy.Field() quote = scrapy.Field() ``` 在上述代码中,我们定义了DoubanTop250Item包含以下字段: - rank:电影排名; - title:电影名称; - rating:电影评分; - quote:电影的经典语录。 5. 运行Spider 在完成上述步骤后,就可以运行Spider开始爬取豆瓣电影TOP250了,可以通过以下命令来运行Spider: ``` scrapy crawl douban_spider -o douban_top250.csv ``` 该命令将会运行名为douban_spider的Spider,并将结果保存到douban_top250.csv文件中。 以上就是使用Scrapy爬取豆瓣电影TOP250的基本步骤,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值