1.python(注意自己安装的版本)
2.lxml
3.Twisted
4.zope.interface
5.PyOpenSSL
6.pywin32
当面对一些包不能用
pip install XXX
的形式安装时,要到whl文件安装whl文件,下载地址https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml。注意,要找到与你安装的ppython版本一致的文件。通过whl文件安装,首先要安装wheel包。把下载好的whl文件放到python的Lib目录下,最后到cmd下运行
pip install XXX.whl
即可。
1.安装:下载连接https://www.mongodb.com/download-center?jmp=nav#community
2.配置环境变量,把mongodb下的bin的安装目录设置为环境变量。可以打开cmd测试有没有配置好
3.先在mongodb安装文件下找到data文件,并在里边创建db文件,这个文件将是以后存放数据的地方,在cmd在运行以下命令,打开数据库服务器
#设置db为数据存放路径,注意代码块里边的地址是db文件夹的地址,这个命令是打开数据库服务器的。每次要打开数据库服务器都要运行这条命令。 #在浏览器输入http://localhost:27017/
#若显示:It looks like you are trying to access MongoDB over HTTP on the native driver port. 表示成功连接 27017是默认本地端
3.下面就可以启动数据库的客户端,由于我们设置了mongodb为环境变量,所以可以在cmd直接输入(注意要保持打开的mongodb数据库端口不能关闭):
mongo #启动数据库客户端,注意,要先打开数据库服务器后才能打开数据库客户端,数据库客户端是用来对数据进行增删改查的,
服务器(serve):一个服务器可以有多个数据库
数据库(database):一个数据库可以多个集合
集合(collection):一个集合可以多个文件,数据库和集合不需要单独创建
文档(document):数据就在文档里,操作也在这里
show dbs #显示所有数据库
use 数据库名 #进入指定数据库
db #显示当前数据库
show collections
1、http://mongovue.software.informer.com/download/ 下载官方mongovue工具(可视化管理工具)
1.创建爬虫项目
打开cmd,进入所要创建爬虫项目的文件夹,运行以下命令,创建爬虫项目
D:\scrapy>scrapy startproject bouban
2.进入爬虫项目,创建爬虫文件,爬虫文件命令要包括爬虫名和所爬网站的域名
scrapy genspider douban_spider movie.douban.com #创建爬虫文件,此处包括爬虫文件名和网站域名
3.在代码编辑器(这里选择sublime text)打开创建好的项目文件,编写相关的代码块
##item,item作用是提前设定好需要爬取的变量名
import scrapy
class DoubanItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
serial_number = scrapy.Field()
movie_name = scrapy.Field()
# introduce = scrapy.Field()
# star = scrapy.Field()
evaluate = scrapy.Field()
# describe = scrapy.Field()
##setting文件常用设置
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'##更该代理,chrome浏览器->F12->F5->top250->header->user_agent,找到替换就行
ROBOTSTXT_OBEY = False##爬虫遵循规则
LOG_LEVEL = 'WARN'##日志显示水平等级
ITEM_PIPELINES = {
'douban.pipelines.DoubanPipeline': 300,
}###运用管道的时候要用到
FEED_EXPORT_ENCODING = 'UTF-8'#用cmd命令输出文件时格式
###spider.py
# -*- coding: utf-8 -*-
import scrapy
import sys
import os
fpath = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
ffpath = os.path.abspath(os.path.join(fpath,".."))
print(ffpath)
sys.path.append(ffpath)
from douban.items import DoubanItem ##注意是from 项目名.items import XXX。sublimes导入itme类时会显示model错误,原因在于路径的问题。因此必须输入以上几条命令。
class DoubanSpiderSpider(scrapy.Spider):
name = 'douban_spider'#蜘蛛的名字
allowed_domains = ['movie.douban.com']#待爬网站域名
start_urls = ['https://movie.douban.com/top250']#起始网站
def parse(self, response):
# print(response)
movie_list = response.xpath('//ol[@class="grid_view"]/li')#生成列表,列表每一个元素都是要爬的一个目标对象
for i_item in movie_list: #遍历列表
douban_item = DoubanItem()#引入item类
douban_item['serial_number'] = i_item.xpath('.//div[@class="item"]//em/text()').extract_first()
douban_item['movie_name'] = i_item.xpath('.//div[@class="hd"]/a/span[1]/text()').extract()
douban_item['evaluate'] = i_item.xpath('.//div[@class="star"]/span[2]/text()').extract_first()
yield douban_item #将爬到的数据返回到item
#### 上面只是完成了一页的爬取,下面获取下一页连接
next_url = response.xpath('//span[@class="next"]/a/@href').extract()#这里可以得到只有一个元素的列表
if next_url:
next_url = next_url[0]#提取,处理唯一的元素
yield scrapy.Request('https://movie.douban.com/top250'+ next_url,callback = self.parse)#注意这里self.parse是没有括号的,callback传递需要调用的函数,不是调用函数。加上括号就调用了函数。这里同样需要把下一页的完整连接yield回去,继续进行下一页的爬虫
# extract() 返回选中内容的Unicode字符串,是一个列表形式
# extract_first() SelectorList专有,返回其中第一个Selector对象调用extract方法。通常SelectorList中只含有一个Selector对象的时候选择调用该方法。extract列表的第一个元素
#re()使用正则表达式来提取选中内容中的某部分。
#举个例子
# selector.xpath('.//b/text()') .extract()
#[‘价格:99.00元’,‘价格:88.00元’,‘价格:88.00元’]
#selector.xpath('.//b/text()').re('\d+\.\d+')
#[ '99.00','88.00','88.00']
#re_first() 返回SelectorList对象中的第一个Selector对象调用re方法。
#selector.xpath('.//b/text()').re_first('\d+\.\d+') # '99.00'
>>> title = response.xpath('//*[@id="post-114638"]/div[1]/h1') >>> title [<Selector xpath='//*[@id="post-114638"]/div[1]/h1' data='
能从远程获得乐趣的 Linux 命令
'>] >>> title.extract() ['能从远程获得乐趣的 Linux 命令
'] >>> title.extract()[0] '能从远程获得乐趣的 Linux 命令
'由于xpath返回一个selector对象,所以可以接着对其操作:
>>> title.xpath('//div[@class="entry-header"]/h1/text()') [<Selector xpath='//div[@class="entry-header"]/h1/text()' data='能从远程获得乐趣的 Linux 命令'>] >>> title.xpath('//div[@class="entry-header"]/h1/text()').extract() ['能从远程获得乐趣的 Linux 命令'] >>> title.xpath('//div[@class="entry-header"]/h1/text()').extract()[0] '能从远程获得乐趣的 Linux 命令' >>>
注意text只会获取到标签内的文本,在遇到下一个标签时后面的文本都将被忽略,如:
html代码:
<div class="post-114638 post type-post status-publish format-standard hentry category-it-tech tag-linux odd" id="post-114638"> <div class="entry-header"> <h1>能从远程获得乐趣的 Linux 命令h1> div> <div class="entry-meta"> <p class="entry-meta-hide-on-mobile"> 2019/01/13 · <a href="http://blog.jobbole.com/category/it-tech/" rel="category tag">IT技术a> · <a href="http://blog.jobbole.com/tag/linux/">Linuxa> p> div> <div class="entry">div> <div class="textwidget">div> div>
text()获取文本:
>>> response.xpath('//*[@id="post-114638"]/div[2]/p').extract()[0] ' '>>> >>> response.xpath('//*[@id="post-114638"]/div[2]/p/text()').extract()[0] '\r\n\r\n 2019/01/13 · ' >>> >>> response.xpath('//*[@id="post-114638"]/div[2]/p/text()').extract()[0].replace('·','').strip() '2019/01/13' >>>
4.运行爬虫文件
在cmd中用命令进入到爬虫蜘蛛的父级目录,运行一下命令
D:\scrapy\douban\douban>scrapy crawl douban_spider -o douban.csv FEED_EXPORT_ENCODING = 'UTF-8' #如果最后编码部分下setting中已经设置好,这里就不用写。若不定义编码方式,可能会出现乱码。若保存的csv文件用excel直接打开会出现中文乱码,因为excel默认打开方式是ASCII码,可以通过选择记事本打开,再另存为的方式解决。