Python爬虫数据操作的技巧有哪些

技术Python爬虫数据操作的技巧有哪些这篇文章主要讲解了“Python爬虫数据操作的技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python爬虫数据操作的技

这篇文章主要讲解了"蟒蛇爬虫数据操作的技巧有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"蟒蛇爬虫数据操作的技巧有哪些"吧!

需求

爬取某网站的项目列表页,获取其url,标题等信息,作为后续爬取详情页的任务url。

代码

#-*-编码: utf-8-*-# @时间:2019-11-0814:04 # @作者: cxa # @文件: motor _ helper。py # @ software : pycharimportsynciimportdatetime frologruimporttlogerfromotor。motor _ asynciomimportatasynciomontrolclientfromcollectionimporttry 3360 importuvloopasyncioeventulooppolicy())异常错误: passdb _ configs={ ' host ' : ' 127。0 .0 .1 ','端口' :'27017 ',' db_name':'mafengwo ','用户' : ' ' }类电机运行: def _ _ init _ _(self): self .__格言_ _ .如果是自己,则更新(* * db _ configs)。用户:自我。motor _ uri=f ' MongoDB :/{ self。用户} : {自我。passwd } @ { self。主机} : {自我。port }/{ self。db _ name }?authSource={ self。db _ name } ' else : self。motor _ uri=f ' MongoDB :/{ self。主机} : {自我。port }/{ self。db _ name } ' self。客户端=AsyncIOMotorClient(self。motor _ uri)self。MB=自我。客户[自我。db _ name]asyncdefsave _ data _ with _ status(self,items,col=' seed _ data ')3360 for iteminbsp

;items:             data = dict()             data["update_time"] = datetime.datetime.now()             data["status"] = 0  # 0初始             data.update(item)             print("data", data)             await self.mb[col].update_one({                 "url": item.get("url")},                 {'$set': data, '$setOnInsert': {'create_time': datetime.datetime.now()}},                 upsert=True)       async def add_index(self, col="seed_data"):         # 添加索引         await self.mb[col].create_index('url')

因为我的爬虫是异步网络模块aiohttp写的,所以选择了pymongo的异步版本motor进行操作。

异步代码的基本属性就是async/await成对的出现,如果把上面的await和async去掉,就是类似pymongo的写法了,这里异步不是重点,重点是我们怎么处理每条数据。

这里除了网页的url,标题等信息,我需要附加3个字段。分别是create_time, status,update_time。

这三个字段分别代表,数据插入数据,状态和更新时间。

那么我为什么添加三个字段呢?

首先,我们需要判断每次的任务数据是否存在,我这里的情况是存在就更新不存在就插入,那么我就需要一个查询条件,作为更新的条件,很显然这里可以使用任务的url作为唯一条件(你还可以使用url+标题做个md5然后保存),好了查询条件确定。

下面说create_time这个比较好理解就是数据插入时间,关键是为什么还要一个update_time,这个的话和status字段有一定的关系。画重点:这个status作为后续爬虫进行爬取的一个标志用。目前这个status有4个值,0-4,我这是这样定义的,

0:初始状态

1:抓取中的任务

2:抓取成功

3:抓取失败

4:抓取成功但是没有匹配到任务。

后面随着任务的爬取,状态也是不断变化的,同时我们需要更新update_time为最新的时间。这个目前的话是体现不出来什么作用,它的使用场景是,重复任务的抓取,比如今天我抓取了任务列表里的url1、url2,第二天的时候我如果再抓到,为了区分是抓取失败还是抓取成功,我们根据create_time和update_time就可以进行推断了,如果两者相同而且是当前的日期说明刚抓的,如果update_time的日期比create_time新可以说明,抓到了重复的任务。关于字段的设计就啰嗦这么些。

下面是实现,我们可以通过update_one方法,对数据作存在或者插入操作,因为url作为查询条件,后面量大的话就最好添加一个索引。也就是上面的  add_index方法。

好了最好说插入更新的具体代码

需要注意的是

{'$set': data, '$setOnInsert': {'create_time': datetime.datetime.now()}}

$setOnInsert里面使用的字段是数据不存在的时候才插入的,存在就不动了,只插入$set里面指定的。

另外$setOnInsert里面使用的字段不能在$set里面再次出现

upsert=True代表的是不存在就插入。

感谢各位的阅读,以上就是“Python爬虫数据操作的技巧有哪些”的内容了,经过本文的学习后,相信大家对Python爬虫数据操作的技巧有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/106529.html

(0)

相关推荐

  • Swift中字符串类型及常用方法有哪些

    技术Swift中字符串类型及常用方法有哪些这篇文章主要介绍了Swift中字符串类型及常用方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 构造

    攻略 2021年11月6日
  • css左右居中怎么设置(css中怎么设置居中)

    技术css3如何设置子元素居中这篇文章主要讲解了“css3如何设置子元素居中”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3如何设置子元素居中”吧!

    攻略 2021年12月16日
  • 2019-2020 ICPC Asia Hong Kong Regional Contest

    技术2019-2020 ICPC Asia Hong Kong Regional Contest 2019-2020 ICPC Asia Hong Kong Regional ContestB - Bi

    礼包 2021年10月28日
  • 九价疫苗,九价HPV疫苗为什么这么火

    技术九价疫苗,九价HPV疫苗为什么这么火HPV也就是人乳头瘤病毒是许多生殖系统癌症比如宫颈癌的罪魁祸首,而针对这个病毒所研发的疫苗也就是所谓的二价疫苗、四价疫苗以及功能最为强大、最近出现的九价疫苗九价疫苗。九价疫苗的作用

    生活 2021年10月28日
  • 春笋怎么保存,什么方法保存竹笋时间最长

    技术春笋怎么保存,什么方法保存竹笋时间最长1. 要保存好竹笋,要先了解一点竹笋老化方面的知识春笋怎么保存。竹笋在强光和高温下新陈代谢很旺盛,竹笋会出现纤维老化。此外,竹笋被采挖出来后,由于没有根部供水了,加上断口失水和竹

    生活 2021年10月24日
  • 美国服务器:为什么跨境电商建站首选美国服务器

    技术美国服务器:为什么跨境电商建站首选美国服务器如果您拥有一个跨境电商独立网站,而且收益还不错,那么您的网站每时每刻都有离线的风险,如果机房的抗攻击和抗流量的能力不够强而导致网站崩溃的话,会让您付出严重的代价。对于这些网

    礼包 2021年10月19日