Scrapy爬虫(7)在Windows中安装及使用Scrapy

news/2024/7/19 11:19:00 标签: python, 爬虫, 开发工具

  本次分享将介绍Scrapy在Windows系统中的安装以及使用,主要解决的问题有:

  • 在Windows中安装Scrapy模块
  • 在IDE(PyCharm)中使用Scrapy
  • Scrapy导出的csv文件乱码

  首先介绍如何在Windows中安装Scrapy模块。
  在https://www.lfd.uci.edu/~gohlke/pythonlibs/网站中下载适合自己Python版本和Windows位数的Twisted模块(Scrapy模块依赖于它)及Scrapy模块, 然后放在Python安装目录下的Scripts文件加下,用pip install方式安装。
  模块安装完毕,输入’scrapy -h’, 输出信息如下则表示Scrapy安装成功。


scrapy -h

  为了能随时随地地使用Scrapy, 需要将Scrapy添加到Windons系统的环境变量中,具体过程不再详述。
  添加到环境变量后再重启电脑,就能随时创建Scrapy项目了,至此,我们以成功地在Windows中安装了Scrapy,并能随时创建Scrapy项目。

  接着讲述如何在PyCharm中使用Scrapy.
  在cmd中输入’scrapy startproject bookSpider’创建bookSpider项目,再在PyCharm中将其导入,文件结构如下:


scrapy项目结构

  我们将完成完成与Scrapy爬虫(5)爬取当当网图书畅销榜中的项目一样的功能,只不过,这一次是在Windows的PyCharm中进行。
  在settings.py中设置“ROBOTSTXT_OBEY = False”. 修改items.py,代码如下:

import scrapy

class BookspiderItem(scrapy.Item):
    rank = scrapy.Field()
    name = scrapy.Field()
    author = scrapy.Field()
    press = scrapy.Field()
    price = scrapy.Field()
    comments = scrapy.Field()

  然后,在spiders文件夹下新建BookSpider.py,代码如下:

python">import scrapy
import scrapy.cmdline
from scrapy.selector import Selector
from bookSpider.items import BookspiderItem

class bookSpider(scrapy.Spider):
    name = 'bookScrapy'
    start_urls = ['http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-%d'%i for i in range(1,26)]

    def parse(self, response):
        item = BookspiderItem()
        sel = Selector(response)

        book_list = response.css('ul.bang_list.clearfix.bang_list_mode').xpath('li')

        for book in book_list:
            item['rank'] = book.css('div.list_num').xpath('text()').extract_first()
            item['name'] = book.css('div.name').xpath('a/text()').extract_first()
            item['author'] = book.css('div.publisher_info')[0].xpath('a/text()').extract_first()
            item['press'] = book.css('div.publisher_info')[1].xpath('a/text()').extract_first()
            item['price'] = book.css('span.price_n').xpath('text()').extract_first()
            item['comments'] = book.css('div.star').xpath('a/text()').extract_first()

            yield item

def main():
    scrapy.cmdline.execute(['scrapy', 'crawl', 'bookScrapy', '-o', 'dangdangBook.csv', '-t', 'csv'])

main()

在上述代码中,引入scrapy.cmdline,能够执行cmd命令,并定义了main()函数来完成cmd命令的执行。

  运行BookSpider.py,程序出错,因为缺少win32api模块。


缺少win32api模块

  莫慌,可以在https://www.lfd.uci.edu/~gohlke/pythonlibs/网站中下载pywin32模块,然后安装即可。安装完pywin32模块后,再次运行BookSpider.py,这次程序运行成功!


程序运行成功

同时,该程序也生成了csv文件。


生成csv文件

  至此,我们以能够在PyCharm环境中使用Scrapy.

  生成的csv文件内容如下,


csv文件内容

我们用WPS Excel打开并没有乱码,但是用Microsoft Excel打开会乱码。解决Microsoft Excel打开乱码的问题,可以具体参考https://www.zhihu.com/question/21414417 .

  本次分享到此结束,欢迎大家交流~~


http://www.niftyadmin.cn/n/1384493.html

相关文章

BZOJ 2190 仪仗队

这道题的关键就是找到所有的点中,x与y互质的点,第一反应必定是暴搜,稍想一下可以从中分开求一半,但范围仍然限定了这条路行不通,仔细画了几张图后发现下图中从第三行起第k行可连fai k个,因此只需从fai3加到…

java根据中心点坐标_JAVA——输入多个经纬度坐标,找出中心点

具体算法介绍请点击:Python实现方式package com.gis.launcher;import com.gis.vo.GeoCoordinate;import java.util.ArrayList;import java.util.List;/*** Created by fc.w on 2017/12/8.*/public class GetCenterPointFromListOfCoordinates {/*** 根据输入的地点坐…

非常实用的剪贴板管理工具 ClipMenu

为什么80%的码农都做不了架构师?>>> 管理剪贴板的利器 ClipMenu 拷贝、粘贴是电脑用户最熟悉的操作,我们平时使用的剪贴板,只能保存最近一次的拷贝。ClipMenu 是一个功能强大的剪贴板管理工具,可以轻松地访问剪贴板历…

linux内核详解

一、linux的内核管理:对内核的基本认识 我们所谈到的操作系统主要指内核 以上功能据没有涉及实现文本编辑、实现字处理,也没有服务等等。 故,操作系统是一种通用软件,是平台类软件,自己并不做任何工作,只是…

消息队列实现双向通信

消息队列实现双向通信应该用两个消息来实现,单个消息队列是单向的,两个单向的消息队列,实现双向。 Where can I find a bidirectional messaging queue? If you need an immediate reply to a message, then you shouldnt use a message que…

104 用C++语言写游戏——打飞机

少啰嗦&#xff0c;看代码&#xff0c;放到编辑器就能用。 #include<iostream> #include<windows.h> #include<conio.h> #include<time.h> #include<string> using namespace std;/* all the structures */typedef struct Frame {COORD positio…

httpclient中文API

httpclient中文API 经典教程httpClient4转载于:https://www.cnblogs.com/disneyland/p/4694737.html

Django REST framework API 指南(14):权限

官方原文链接本系列文章 github 地址转载请注明出处 权限 与 authentication 和 throttling 一起&#xff0c;permission 决定是应该接受还是拒绝访问请求。 权限检查总是在视图的最开始处运行&#xff0c;在任何其他代码被允许进行之前。权限检查通常会使用 request.user 和 r…