南阳响应式网站,丹东网站制作,室内设计好还是平面设计好,手机网站模板cms安装完成Scrapy以后#xff0c;可以使用Scrapy自带的命令来创建一个工程模板。
一、创建项目 使用Scrapy创建工程的命令为#xff1a;
scrapy startproject 工程名 例如#xff0c;创建一个抓取百度的Scrapy项目#xff0c;可以将命令写为#xff1a;
scrapy s… 安装完成Scrapy以后可以使用Scrapy自带的命令来创建一个工程模板。
一、创建项目 使用Scrapy创建工程的命令为
scrapy startproject 工程名 例如创建一个抓取百度的Scrapy项目可以将命令写为
scrapy startproject baidu 工程名可以使用英文字母和数字的组合但是绝对不能使用“scrapy”小写作为工程名否则爬虫无法运行。也不要使用任何已经安装的Python第三方库的名称作为工程名否则可能会出现奇怪的错误。这是由于Python在导入库的时候会优先从当前工程文件夹中寻找满足条件的文件或者文件夹如果工程的名称本身就为scrapy那么Python就无法找到正常的Scrapy库的文件。 创建完成工程以后Scrapy有以下的提示
you can start your first spider with:cd baidu scrapy genspider example example.com 这个提示的意思是说可以通过下面的两条命令来创建第一个爬虫。根据它的说明来执行命令
cd baiduscrapy genspider example baidu.com 在Scrapy genspider命令中有两个参数“example”和“baidu.com”。其中第1个参数“example”是爬虫的名字这个名字可以取英文和数字的组合但是绝对不能为“scrapy”或者工程的名字。在现在这个例子中爬虫的工程名为“baidu”所以这里的第1个参数也不能为“baidu”。 第2个参数“baidu.com”是需要爬取的网址。开发工程师可以修改为任何需要爬取的网址。 需要注意的是在这个例子中“baidu.com”没有加“www”这是因为在浏览器中直接输入“baidu.com”就可以打开百度的首页。如果有一些网址需要添加二级域名才能访问那么这里也必须要把二级域名加上。例如
scrapy genspider news news.163.com 现在已经把爬虫创建好了在PyCharm中打开Scrapy的工程可以看到在spiders文件夹下面有一个example.py 。 这个由Scrapy自动生成的爬虫运行以后是不会报错的但是它不会输出有用的信息。 现在将第11行
pass 修改为
print(response.body.decode()) 修改完成以后通过Windows或者Mac、Linux的终端进入爬虫的工程根目录使用以下命令运行爬虫
scrapy crawl 爬虫名 这里启动百度首页爬虫的命令为
scrapy crawl example 需要特别强调的是Scrapy的爬虫绝对不能通过Python直接运行example.py来运行。 上面的代码运行以后可以看到并没有百度首页上面的任何文字出。 这是由于Scrapy的爬虫默认是遵守robots.txt协议的而百度的首页在robots.txt协议中是禁止爬虫爬取的。 要让Scrapy不遵守robots.txt协议需要修改一个配置。在爬虫的工程文件夹下面找到并打开settings.py文件可以在里面找到下面的一行代码。
# Obey robots.txt rulesROBOTSTXT_OBEY True 将True修改为False
# Obey robots.txt rulesROBOTSTXT_OBEY False 再一次运行爬虫可以正常获取到百度的首页。 Scrapy的爬虫与普通的Python文件普通爬虫的不同之处在于Scrapy的爬虫需要在CMD或者终端中输入命令来运行不能直接运行spiders文件夹下面的爬虫文件。那么如何使用PyCharm来运行或者调试Scrapy的爬虫呢为了实现这个目的需要创建另外一个Python文件。文件名可以取任意合法的文件名。这里以“main.py”为例。 main.py文件内容如下
from scrapy import cmdlinecmdline.execute(scrapy crawl example.split() 将main.py文件放在工程的根目录下这样PyCharm可以通过运行main.py来运行Scrapy的爬虫。 二、在Scrapy中使用XPath 由于可以从response.body.decode()中得到网页的源代码那么就可以使用正则表达式从源代码里面提取出需要的信息。但是如果可以使用XPath则效率将会大大提高。好消息是Scrapy完全支持XPath。
1. ScrapyXPath语法说明 Scrapy与lxml使用XPath的唯一不同之处在于Scrapy的XPath语句后面需要用.extract()这个方法。 “extract”这个单词在英语中有“提取”的意思所以这个.extract()方法的作用正是把获取到的字符串“提取”出来。在Scrapy中如果不使用.extract()方法那么XPath获得的结果是保存在一个SelectorList中的直到调用了.extract()方法才会将结果以列表的形式生成出来。 这个SelectorList非常有意思它本身很像一个列表。可以直接使用下标读取里面的每一个元素也可以像列表一样使用for循环展开然后对每一个元素使用.extract()方法。同时又可以先执行SelectorList的.extract()方法得到的结果是一个列表接下来既可以用下标来获取每一个元素也可以使用for循环展开。
2. Scrapy的工程结构 scrapy.cfgtutorial/__init__.pyitems.pypipelines.pysettings.pyspiders/__init__.py... 其中对于开发Scrapy爬虫来说需要关心的内容如下。 1spiders文件夹存放爬虫文件的文件夹。 2items.py定义需要抓取的数据。 3pipelines.py负责数据抓取以后的处理工作。 4settings.py爬虫的各种配置信息。 在有spiders和settings.py这两项的情况下就已经可以写出爬虫并保存数据了。 但是为什么还有items.py和pipelines.py这两个文件呢这是由于Scrapy的理念是将数据爬取和数据处理分开。 items.py文件用于定义需要爬取哪些内容。每个内容都是一个Field。 pipelines.py文件用于对数据做初步的处理包括但不限于初步清洗数据、存储数据等。
--------------------------------------
没有自由的秩序和没有秩序的自由同样具有破坏性。