scrapy 采集百度贴吧入库 mysql 后。入库数据时间是混乱的,有什么办法可以按百度贴吧发贴时间顺序入库不?

2017-04-30 15:14:44 +08:00
 bb2018
scrapy 采集百度贴吧入库 mysql 后。入库数据时间是混乱的,有什么办法可以按百度贴吧发贴时间顺序入库不?

如图:

https://static.oschina.net/uploads/space/2017/0430/125704_3lK4_2628079.png


后面的这一列时间。是我采集的百度贴吧楼主发贴的时间。入库后发现这个好混乱。

如果想把百度贴吧发贴的时间顺序入库。

请问实现这个需要什么思路?
3569 次点击
所在节点    Python
24 条回复
sunchen
2017-04-30 16:15:26 +08:00
我的天,不能 order by 一下吗
iyaozhen
2017-04-30 16:24:40 +08:00
为什么要保证数据库里是顺序的?
chinvo
2017-04-30 16:26:51 +08:00
爬的时候把百度输出的 发帖 /回复 时间也爬了,然后按时间排序呗
bb2018
2017-04-30 17:11:29 +08:00
@sunchen insert into 数据库没法 order by 吧?

我是想实现这样的功能:
比如贴子时间分别是:2010 年 5 月 2011 年 5 月 2012 年 5 月 2013 年 5 月 2014 年 5 月 2015 年 5 月 的六个贴子。

现在用 scrapy 采集到 item 里入库 mysql 的时候。这个时间是混乱的。有可能 id 对应的时间是 2015 年的, 也有可能是 2013 年的。
而我想实现的功能是:id 1 对应的是最早的贴子 2010 年 5 月的 id 2 对应的次早的贴子 2011 年 5 月的 最大的 id 6 对应的是 2015 年的贴子,这样我调用出来的时候显示的才是最新的。

不知道这个是怎么排序的? 是入库前在 scrapy 的 item 里就排好了序? 还是在入库 mysql 的时候排? 还是都不行。只能在用代码调用数据的时候排数据? 而不管这个 id 是多少?
tttty
2017-04-30 17:13:55 +08:00
插入排序
bb2018
2017-04-30 17:14:28 +08:00
@iyaozhen 因为如果那时间是混乱的。 第一条数据 id 1 可能对应的是最新的贴子,而最大的 id 也就是最后入库的那个贴子有可能是是几年前的最老的那个贴子。 这样很不好吧?
bb2018
2017-04-30 17:16:47 +08:00
@tttty 这样? INSERT INTO tbl_name (a1 , a2 , a3) VALUES (b1, b2, b3 ) order by b3 desc;
b3 是百度发贴的时间
这样吗? 好像不行。
CosimoZi
2017-04-30 17:18:31 +08:00
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。为什么要保证 id 是按顺序的。你加个发帖时间字段不行吗。
bb2018
2017-04-30 17:21:31 +08:00
@CosimoZi 加个发贴时间。那入库的时间就是新的发贴时间了。我是想保留原发贴时间。就用原发贴时间。最好原发贴时间与 id 对应。
em70
2017-04-30 17:25:47 +08:00
你直接说你的根本需求,大家帮你出主意。你的解决方案完全是无意义的,没有讨论价值
CosimoZi
2017-04-30 18:47:20 +08:00
@bb2018 感觉你完全不懂 sql。。。
mozutaba
2017-04-30 18:51:06 +08:00
那你别用自增 id 呗。
bb2018
2017-04-30 19:45:44 +08:00
@CosimoZi 是的。新手正在边查资料边试验。只会最基本的几条语句
bb2018
2017-04-30 19:46:51 +08:00
@em70
这样的需求。不知道这样描述,能表达清楚不:

我是想实现这样的功能:
比如贴子时间分别是:2010 年 5 月 2011 年 5 月 2012 年 5 月 2013 年 5 月 2014 年 5 月 2015 年 5 月 的六个贴子。

现在用 scrapy 采集到 item 里入库 mysql 的时候。这个时间是混乱的。有可能 id 对应的时间是 2015 年的, 也有可能是 2013 年的。
而我想实现的功能是:id 1 对应的是最早的贴子 2010 年 5 月的 id 2 对应的次早的贴子 2011 年 5 月的 最大的 id 6 对应的是 2015 年的贴子,这样我调用出来的时候显示的才是最新的。

不知道这个是怎么排序的? 是入库前在 scrapy 的 item 里就排好了序? 还是在入库 mysql 的时候排? 还是都不行。只能在用代码调用数据的时候排数据? 而不管这个 id 是多少?
xjx0524
2017-04-30 19:58:49 +08:00
“加个发贴时间。那入库的时间就是新的发贴时间了。我是想保留原发贴时间。就用原发贴时间。最好原发贴时间与 id 对应。”

搞不懂你这前半句什么意思,既然能爬到发帖时间,就把这个时间存到一个字段里,需要 select 的时候按这个字段排序不就完了
gdtv
2017-04-30 20:25:22 +08:00
我明白楼主的意思,楼主采用的采集框架或者别人的采集代码把最后回复时间当成了帖子时间,这个很简单啊,自己想办法抓取到主帖的发帖时间就行了啊。
PS:我前不久也做了百度贴吧采集。
Famio
2017-04-30 20:28:32 +08:00
说真的,我也不会去关心入库的顺序,反正读的时候 order by
em70
2017-04-30 20:36:21 +08:00
@bb2018 有个名词叫时间戳,具体含义可以去百度下,你抓到的 2017-1-24 10:31 这样的时间数据都可以很方便的转换为一个唯一的时间戳数字,把这个数字保存到一个字段,查询时候用这个数字排序即可
wwqgtxx
2017-04-30 20:49:55 +08:00
为啥要管插入顺序,select 的时候排个序不就好了
至于时间,直接把网页上的时间转成时间戳保存进数据库不就行了
changwei
2017-05-01 00:48:47 +08:00
首先看到你的时间前面带 u,说明你时间还是 str 类型的,其次百度贴吧 tid 帖子号是时间递增的,直接用正则表达式分割出 url 里面 p 后面的数字,然后 order by 一下就可以,另外客户端接口可以直接抓取到时间戳

我的 github.com/cw1997,里面有几个贴吧相关的爬虫项目,php 的 py 的都有,你可以找找看。zhuanlan.zhihu.com/codes 近期也会发布相关文章,欢迎持续关注。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/358243

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX