爬虫 爬取多页数据

最近在写一个简单的爬虫,最开始使用的是BS4工具,可是后面接触到xpath,以为这个比较适合我哈哈.html

而后用xpath又从新写了一遍,其中让我困扰的仍是多页爬取,ip总是被封.python

网上找了不少方法,大多数都是说要创建一个ip池,循环爬取多页数据的时候,就换ip这样就不会被封了.数据库

而后代理ip有两种,一个要付费比较稳定,毕竟要钱嘛,还有一个是有些网站能够提供免费代理ip,可是只有部分可用,要本身爬下来而后一个一个检验有效性再存入数据库多线程

而后我了解到的是西刺代理ip是免费的,可是我在网上好像找不到它的官网了,多是换网址了,(哎,就算找到了,弄个代理ip感受也挺费时间的)工具

最后我分析了一下我要爬的网站,好像网站挺简单的,只是一个静态的html,而后会封我ip(哈哈我最开始写的时候直接一个循环怼上去,致使频繁访问,被远程主机认为是ddos,而后拒绝服务了)网站

后面仍是用time.sleep(time)来限制了一下访问速度,虽然我本意不是这样呜呜呜(被现实击垮了,不得不屈服),而后多页爬取还有一个问题就是速度太慢了,好比说我此次爬取的数据就有10000页,线程

那直接爬的话速度将会很慢很慢,这时候就要用到多线程,虽然速度仍是受到了限制(python的GIL限制),可是也够用了3d

而后中间出现了一点小插曲(episode,哈哈和我一块儿背单词),就是xpath的使用 ( .// 和 // ) .//表示在本层次查找 //表示从根元素开始查找,没图说勾八,上图!!,咱先贴上要爬取页面的源码代理

 

 这里咱们要爬的是tr里面的内容,简单分析了一下,直接上代码!!!htm

 

 这里解释一下trs为何从第一行开始,由于第一行不是咱们想要的数据,第一行是标题,咱们这里用trs[1:]把它过滤掉了,这个 td = tr.xpath('//td'),

表示查找全部的td标签,这么写实际上是有问题的,前面已经分析过了,就是这么写的话每次都是从根节点开始查找全部的td,观察输出结果也能够发现,

每次的id都是同样的,而其实这个代码的意思也很明显,就是每次从tr下面查找全部的td,因此应该这么写 td = tr.xpath('.//td')  .//表示从tr这一层开始查找

好啦 3 2 1 再见咯

相关文章
相关标签/搜索