python爬取内容重复输出_Python从零开始写爬虫-6 重复抓取,代理以及总结

在前面一节中,我们终于获得了自己的离线小说, 但是也存在一些问题.

每次都重新抓取

在实际中,很难保证一次抓取就抓取到自己全部需要的网页,所以我们需要避免重复抓取.这里一般有两种策略.

确定我还有多少没有下载

确定我下载了多少

第一种方法, 获取一次目录之后,将需要下载的章节本地保存, 然后每下载一个文件就将这条记录删除.

第二种方法, 每次运行都重新获取目录, 然后确定吧本地那些已经下载了, 取交集

我们这里选择第二种方法, 废话不多说,直接上代码.

import os

def getExist(path):

dirs = os.listdir(path)

return set(file[:-4] for file in dirs) # 删除后缀, 使用set保存

修改抓取代码

contents = getContents(url)

i = 1

exist = getExist('novel') # 'novel'为保存目标

for url, title in contents:

if title in exist: continue

threading.Thread(name='t1', target=craw, args=(url, title)).start()

i = i + 1

if i % 100 == 0: time.sleep(10)

这样就可以很简单的避免重复抓取.

代理

使用单个ip不断的抓取网页, 很可能出现无法获取网页的代码, 网站返回的code为503.这个时候我们需要使用代理.大家可以在下面获取免费的ip

获取的代理其实就是ip地址加一个端口号, 格式为: xx.xx.xx.xx:xxxx, 假设获取的道理的代理为proxy.

将我们获取网页代码修改为 r = requests.get(url, proxies={"http": 'http://' + proxy, "https": 'https://' + proxy}) # 通过代理,获得html内容即可.

总结

到这里, 如何最简单的爬虫的就已经全部完成了.

一个爬虫,主要涉及以下几个问题:

如何获取网页, 主要避免服务器对爬虫的限制(包括验证码, 链接限制, 登录限制, js网页), 我们这个教程没有涉及到如何避免限制, 这个要根据需要抓取的内容来的, 我们抓取的这边不需要这些内容.

解析网页, 我们使用的是正则表达式, 但是想要深入学习爬虫, 最后使用专门的库, 例如:BeautifulSoup

动态获取并且更新需要爬取的网页

保存网页, 应为这个抓取的是小说, 直接写入txt文件即可, 针对不同的数据需要使用不同的保存方式, 包括但不限于(文件, 关系型数据库, 分布式文件系统, 分布式数据库)

日志, 一个爬虫系统, 应该在其输入其工作的流程, 方便调试以及记录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值