python基于scrapy框架爬取当当图书信息

本次爬取主要任务是用scrapy框架爬取当当图书名称、作者是、价格、出版社、图片等信息,为了方便后期的处理和应用,可以将信息利用mysql数据库存储。

一、创建并连接mysql数据库

1、利用cmd命令进入Windows系统,并启动mysql数据库

C:\Users\Administrator>cd /d C:\Windows\System32
C:\Windows\System32>net start mysql80

显示服务已经启动成功

2、利用MySQL Workbench工具创建数据库并新建一个Table列表用来存储数据

book_info_list为新建的列表

3、编辑表格,添加想获取的信息名称

主要是获取图书名称、链接、价格、作者、出版社、IS

二、创建scrapy爬虫工程

在这里插入图片描述

三、爬取需要的页面信息

以自取当当网中的【地理信息管理系统】这个类目为例:

1、获取初始页面的网址,也就是start_urls的值

在这里插入图片描述

  name = 'book_info'
  allowed_domains = ['dangdang.com']
  start_urls = ['http://category.dangdang.com/cp01.54.17.00.00.00.html']

2、用xpath解析当前网页,查找图书信息所在的标签树

在这里插入图片描述

info_list = response.xpath('//ul[@class="bigimg"]/li')

3、在标签树下提取需要的信息

 for li in info_list:
        item = DangdangspiderItem()
         item['title'] = li.xpath('./a/@title').get()
         item['link'] = li.xpath('./a/@href').get()
         item['comment'] = li.xpath('.//a[@class="search_comment_num"]/text()').get()
         price = li.xpath('.//span[@class="search_now_price"]/text()').get()
         item['price'] = price.strip('¥')
         public_info = li.xpath('.//p[@class="search_book_author"]//text()').getall()
         public_info = ','.join(public_info)
         item['author'] = public_info.split('/')[0].strip().strip(',')
         item['public_time'] = public_info.split('/')[1].strip().strip(',')
         item['publictor'] = public_info.split('/')[2].strip().strip(',')
         item['detail'] = li.xpath('./p[@class="detail"]/text()').get()
         yield item

4、在pipelines中将数据保存在mysql数据库中

def process_item(self, item, spider):
    title = item['title']
    print("正在处理%s的信息" % title)
    link = item['link']
    comment = item['comment']
    price = item['price']
    detail = item['detail']
    author = item['author']
    public_time = item['public_time']
    publictor = item['publictor']
    isbn, img_url_list = self.parse_single_book(link)
    book_dir_path = self.get_img(img_url_list, title)
    isbn_img_path = book_dir_path + '\isbn_img'
    barcode.generate('code128', code=isbn, writer=ImageWriter(), output=isbn_img_path)
    data = (title, price, author, comment, public_time, isbn, link, publictor, detail)
    connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='dangdang',
                                 charset='utf8mb4')
    cursor = connection.cursor()
    sql = "insert into book_info_list(Title,Price,Author, Comment, Public_time, ISBN, Link,Publictor,Detail) values (%s, %s, %s, %s, %s, %s, %s, %s, %s);"
    try:
        print('正在保存数据')
        cursor.execute(sql, data)
        connection.commit()
        print('保存成功')
    except Exception as err:
        print(err)
    cursor.close()
    connection.close()
    return item

4、设置翻页

本次只提取前3页的信息

for i in range(2, 4):
    url = 'http://category.dangdang.com/pg' + str(i) + '-cp01.54.02.00.00.00.html'
    yield Request(url, callback=self.parse)

5、新建start.py文件用以运行工程

from scrapy import cmdline
cmdline.execute('scrapy crawl book_info'.split())

在这里插入图片描述
网页上的图书信息已经爬取下来了,可以在workbench中打开查看
在这里插入图片描述
扫描下方二维码,关注“海海读书”公众号,回复“当当”二字,即可获得程序原代码
在这里插入图片描述

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是基于PythonScrapy框架爬取豆瓣电影的步骤: 1. 创建Scrapy项目 使用以下命令在命令行中创建新的Scrapy项目: ``` scrapy startproject douban_movie ``` 这将在当前目录下创建一个名为douban_movie的文件夹,其中包含了一个Scrapy项目的基本结构。 2. 定义Item 在Scrapy中,Item是一个Python类,用于存储从网页中提取出来的数据。在此例中,我们需要定义一个Item来存储每部电影的信息,包括电影名称、导演、主演、上映日期、评分等。 在douban_movie/spiders文件夹下创建一个名为items.py的文件,定义一个MovieItem类,代码如下: ```python import scrapy class MovieItem(scrapy.Item): name = scrapy.Field() director = scrapy.Field() actors = scrapy.Field() release_date = scrapy.Field() rating = scrapy.Field() ``` 3. 编写Spider 在Scrapy中,Spider是用于从网页中提取数据的核心组件。我们需要编写一个Spider来爬取豆瓣电影的信息。 在douban_movie/spiders文件夹下创建一个名为douban_spider.py的文件,定义一个DoubanSpider类,代码如下: ```python import scrapy from douban_movie.items import MovieItem class DoubanSpider(scrapy.Spider): name = "douban" allowed_domains = ["movie.douban.com"] start_urls = ["https://movie.douban.com/top250"] def parse(self, response): movies = response.xpath('//div[@class="hd"]') for movie in movies: item = MovieItem() item['name'] = movie.xpath('.//a/span/text()').extract_first() item['director'] = movie.xpath('.//div[@class="bd"]/p/text()[1]').\ extract_first().strip().split(":")[1] item['actors'] = movie.xpath('.//div[@class="bd"]/p/text()[1]').\ extract_first().strip().split(":")[2] item['release_date'] = movie.xpath('.//div[@class="bd"]/p/text()[2]').\ extract_first().strip().split("/")[0].strip() item['rating'] = movie.xpath('.//span[@class="rating_num"]/text()').\ extract_first() yield item ``` 在上述代码中,我们首先定义了Spider的名称、域名和起始URL。然后,在parse()方法中,我们使用XPath表达式来提取每部电影的信息,并将其存储到我们之前定义的MovieItem对象中。最后,我们使用yield关键字返回每个MovieItem对象,使其能够被后续的Pipeline组件处理。 4. 编写Pipeline 在Scrapy中,Pipeline是用于对Spider提取出的数据进行处理的组件。在此例中,我们需要编写一个Pipeline来将电影信息存储到本地文件中。 在douban_movie/pipelines文件夹下创建一个名为douban_pipeline.py的文件,定义一个DoubanPipeline类,代码如下: ```python import json class DoubanPipeline(object): def open_spider(self, spider): self.file = open('douban_movie.json', 'w', encoding='utf-8') def close_spider(self, spider): self.file.close() def process_item(self, item, spider): line = json.dumps(dict(item), ensure_ascii=False) + '\n' self.file.write(line) return item ``` 在上述代码中,我们首先在open_spider()方法中创建了一个名为douban_movie.json的文件,用于存储电影信息。然后,在close_spider()方法中关闭了该文件。最后,在process_item()方法中,我们将每个MovieItem对象转换为JSON格式,并将其写入到文件中。 5. 运行Spider 在命令行中执行以下命令,启动Spider并爬取数据: ``` scrapy crawl douban ``` Spider会自动爬取豆瓣电影Top250的页面,并将提取出来的电影信息存储到本地文件中。 至此,我们已经成功地使用Scrapy框架爬取了豆瓣电影的信息。接下来,我们可以使用Python的数据可视化工具来对这些数据进行分析和展示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值