zoukankan      html  css  js  c++  java
  • Python Scrapy爬虫(下)

    Python Scrapy爬虫(下)

    一、在Pycharm中运行Scrapy爬虫项目的基本操作

    1、Pycharm安装好Scrapy模块:scrapy的安装之前需要安装这个模块:方案一:lxml->zope.interface->pyopenssl->twisted->scrapy。方案二:wheel(安装.whl文件)、lxml(lxml是用来做xpath提取)、Twisted、pywin32。

    2、通过pycharm创建scrapy项目pycharm不能直接创建scrapy项目,必须通过命令行创建。在PycharmTerminal终端,cd命令指定文件,然后通过命令:scrapy startproject scrapyspider,创建名为scrapyspiderscrapy项目

    3、通过cmd创建scrapy项目:设置环境变量path,增加scrapy.exe的所在文件夹的路径。cd命令指定文件,然后通过命令:scrapy startproject scrapyspider,创建名为scrapyspiderscrapy项目

    二、scrapyspider目录

    scrapyspider/
        scrapy.cfg
        scrapyspider/
            __init__.py
            items.py
            pipelines.py
            settings.py
            spiders/
                __init__.py
                ...
    

    1、目录下各个文件:

    • crapy.cfg: 项目的配置文件。
    • scrapyspider/: 该项目的python模块。之后您将在此加入代码。
    • scrapyspider/items.py: 项目中的item文件。
    • scrapyspider/pipelines.py: 项目中的pipelines文件。
    • scrapyspider/settings.py: 项目的设置文件。
    • scrapyspider/spiders/: 放置spider代码的目录

     

    三、编写scrapy框架中需要编写的spider、Item 、pipelline的代码

    1、Item 部分代码:容器(items)的定义,容器不一定是一开始全部都定义好的,可以跟随项目的更新一点点向里面添加。

    注:网页收集信息包含多种类型时,需要为每种类型的数据定义单独的 class

    import scrapy
    
    
    class TutorialItem(scrapy.Item):   # 创建一个类,继承scrapy.item类,就是继承人家写好的容器
        # define the fields for your item here like:
        # name = scrapy.Field()
        movieid = scrapy.Field()
        moviename = scrapy.Field()
        directors = scrapy.Field()
        actors = scrapy.Field()
        posterPath = scrapy.Field()
        plotSummary = scrapy.Field()
        averageratings = scrapy.Field()
        numRatings = scrapy.Field()
    

    2、spider部分代码:用户编写用于从单个网站(或者一些网站)爬取数据的类。

    1、创建一个Spider,您必须继承 scrapy.spiders.Spider 类

    from scrapy.spiders import Spider
    

    2、根据需求定义属性和方法:

    2.1、name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字

    2.2、start_urls: 包含了Spider在启动时进行爬取的url列表

    2.3、def parse() 方法:方法被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response.data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象

    2.4、可以根据需求定义其他方法:def start_requests、def make_requests_from_url、def update_settings、def handles_request、def close等。

    2.5、读取配置文件setting.py的方法:

      由原来的:from scrapy.conf import settings,改成“装饰器方法”:from scrapy.utils.project import get_project_settings;settings = get_project_settings()

    设置name、start_urls和一些变量:

        name = "demo"
        movie_id = 1
        #handle_httpstatus_list = [401]
        allowed_domains = ["movielens.org"]
        start_urls = ["https://movielens.org/api/movies/"]
    

    def parse() 方法:

        def parse(self, response):
            #filename = response.url.split("/")[-2]
    
            #filename = "movies"
            #with open(filename, 'ab') as f:
            # f.write(response.body)
    
            item = MovieItem()
            entity = json.loads(response.body)
            movie = entity['data']['movieDetails']['movie']
            item['movieid']= entity['data']['movieDetails']['movieId']
            item['moviename'] = movie['title']
            item['directors'] = ",".join(movie['directors'])
            item['actors'] = ",".join(movie['actors'])
            item['posterPath']  = movie['posterPath']
            item['plotSummary']  = movie['plotSummary']
            item['averageratings']  = movie['avgRating']
            item['numRatings']  = movie['numRatings']
            yield item
    
            while self.movie_id<140215:
                self.movie_id += 1
                url = self.start_urls[0]+str(self.movie_id)
                yield scrapy.Request(url, dont_filter=True, callback=self.parse)
    

     3、pipelline部分代码,持久化实体

    import json
    from tutorial.items import MovieItem
    
    
    class TutorialPipeline(object):
    
        def __init__(self):
            self.conn = mysql.connector.connect(user='root', password='123456', database='how2java')
            self.cursor = self.conn.cursor()
    
    
        def process_item(self, item, spider):
            insert_sql = """
                                insert into movie(movieid, moviename, directors, actors, posterPath, plotSummary, averageratings, numRatings)
                                VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
                            """
            self.cursor.execute(insert_sql, (
            item["movieid"], item["moviename"], item["directors"], item["actors"], item["posterPath"], item["plotSummary"], item["averageratings"],
            item["numRatings"]))
            self.conn.commit()
    

     

    四、爬虫常用的命令

    1、创建项目:scrapy startproject xxx
    2、进入项目:cd xxx #进入某个文件夹下
    3、创建爬虫:scrapy genspider xxx(爬虫名) xxx.com (爬取域)
    4、输出item:scrapy crawl xxx -o xxx.json -t json (生成名称xxx.jsonjson 文件);CSV、XML等!或者在解析函数里增加适当的代码将item对象写入文件或数据库.
    5、运行爬虫:scrapy crawl XXX
    6、列出所有爬虫:scrapy list
    7、获得配置信息:scrapy settings [options]


  • 相关阅读:
    UiPath鼠标操作文本的介绍和使用
    UiPath鼠标操作元素的介绍和使用
    UiPath循环活动Do While的介绍和使用
    UiPath循环活动Do While的介绍和使用
    UiPath循环活动While的介绍和使用
    设计模式之: Decorator(装饰器)模式
    C语言深度解剖读书笔记(1.关键字的秘密)
    HDU 4341 Gold miner (分组背包)
    HDU 3496 Watch The Movie( 二维费用背包)
    Mahout源码MeanShiftCanopyDriver分析之一初识
  • 原文地址:https://www.cnblogs.com/yinminbo/p/11825503.html
Copyright © 2011-2022 走看看