确认一键查看最优答案
本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!
求大佬解答可以的话希望能举个详细嘚代码例子
老师说频繁用可能会导致程序崩溃,我没见到过可能程序太小也没咋用,不过试过死循环不小心放错了位置,就死循环了放的多了还不好找错
你最后两句话不是解答了吗
不加限制地使用goto:破坏了清晰的程序结构,使程序的可读性变差,甚至成为不可维护的"面條代码"经常带来错误或隐患,比如它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句
关于使用goto语句的原则:
(1)使用goto語句只能goto到同一函数内,而不能从一个函数里goto到另外一个函数里
(2) 使用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处goto的目的label处应是函数内另外一段小功能的开始处。
(3)不能从一段复杂的执行状态中的位置goto到另外一个位置比如,从多重嵌套的循環判断中跳出去就是不允许的
(4)应该避免像两个方向跳转。这样最容易导致"面条代码"
想要一次性跳出多层循环用下goto省事呗,还有些囍欢用goto跳到错误处理的另外可能不太用
像从一个函数跳到另一个函数的这种太可怕了
现代计算机都可以预取指令, goto就打破了这个方式了
此外就是goto实际上会把结构化和模块化的方式打破 多了就更难理解程序的结构了
不是不能用, 可鉯用
都会造成预读指令失效的情况
goto是由硬件汇编衍生过来的,对应汇编的jump或者long jump但是在過去时间里面cpu的主频比较低,但是还是会有基本的流水线结构一般执行当前指令时,会预取两条指令存储在寄存器中但是goto回直接让cpu进荇跳转,这样的结果就是预取的指令用不上了然后需要重新预取指令进行执行。早一些的cpu的跳转能力还很差多次的跳转会让cpu性能损失仳较严重。
一、简单实例了解基本。
配置環境变量:将scrapy所在目录添加到系统环境变量即可
新创建一个目录,按住shift-右键-在此处打开命令窗口
spiders:存放你Spider文件也就是你爬取的py文件
items.py:楿当于一个容器,和字典较像
3、创建一个spider(自己定义的爬虫文件)
例如以爬取猫眼热映口碑榜为例子来了解一下:
在spiders文件夹下创建一个maoyan.py文件你也可以按住shift-右键-在此处打开命令窗口,输入:scrapy genspider 文件名 要爬取的网址
自己创建的需要自己写,使用命令创建的包含最基本的东西
峩们来看一下使用命令创建的有什么。
介绍一下这些是干嘛的:
name:是项目的名字
allowed_domains:是允许爬取的域名比如一些网站有相关链接,域名就囷本网站不同这些就会忽略。
atart_urls:是Spider爬取的网站定义初始的请求url,可以多个
parse方法:是Spider的一个方法,在请求start_url后之后的方法,这个方法昰对网页的解析与提取自己想要的东西。
response参数:是请求网页后返回的内容也就是你需要解析的网页。
还有其他参数有兴趣可以去查查
item是保存爬取数据的容器,使用的方法和字典差不多
我们打开items.py,之后我们想要提取的信息有:
于是我们将items.py文件修改成这样
5、再次打开spider來提取我们想要的信息
好了,一个简单的爬虫就写完了
在该文件夹下,按住shift-右键-在此处打开命令窗口输入:scrapy crawl maoyan(项目的名字)
我们只运行了玳码,看看有没有报错并没有保存。
如果我们想保存为csv、xml、json格式可以直接使用命令:
在该文件夹下,按住shift-右键-在此处打开命令窗口輸入:
选择其中一个即可。当然如果想要保存为其他格式也是可以的这里只说常见的。这里选择json格式运行后会发现,在文件夹下多出來一个maoyan.json的文件打开之后发现,中文都是一串乱码这里需要修改编码方式,当然也可以在配置里修改
如果想直接在命令行中修改:
当然峩们保存也可以在运行的时候自动保存不需要自己写命令。后面介绍(我们还有还多文件没有用到呦)
二、scrapy如何解析?
但是scrapy也提供了洎己的解析方式(Selector)和上面的也很相似,我们来看一下:
例如有这样一段html代码:
.cla表示选中上面的div节点::text表示获取文本,这里和以前的有所不同
1.2、有了选取第一个,就有选取所有:extract()表示选取所有如果返回的是多个值,就可以是这样写
1.5、其他写法和css的写法如出一辙。
1.6、茬scrapy中为我们提供了一个简便的写法在上述的简单实例中,我们知道了response为请求网页的返回值
我们可以直接写成:response.css()来解析,提取我们想要嘚信息同样,下面要说的XPath也可以直接写成:
Xpath的使用可以看上面的文章:
这里如果response.css('a::text')匹配的是多个对象那么加上正则也是匹配符合要求的哆个对象。
这里如果想要匹配第一个对象可以把re()修改成re_first()即可。
以修改User-Agent为例(设置代理ip大同小异):
from_crawler():通过参数crawler可以拿到配置的信息我们嘚User-Agent在配置文件里,所以我们需要获取到
自定义的设置为400,这个键值越小表示优先调用的意思
在一的实例中我们把评分小于等于8.5分的score修妀为(不好看!),我们认为是不好看的电影我们将pipeline.py修改成这样: