c爬虫抓取网页数据(*敏*感*词*网站存储7万多条记录()时间送达!)

优采云 发布时间: 2022-02-04 12:16

  c爬虫抓取网页数据(*敏*感*词*网站存储7万多条记录()时间送达!)

  关键时刻,第一时间发货!

  节前的一次误操作,清空了mysql中的记录表和电影表。显然,我没有做任何mysql备份。于是,我干脆清空了所有表数据,一夜之间又回到了解放前……

  在之前的版本中,记录表存储了7万多条记录,爬取了4万多条记录,但是可以明显的发现,爬取的数据越多,卡机越多。又报错了,是关于JDBC的,又一次机器卡住了。

  经过仔细考虑,之前版本的爬虫程序和数据库的读写次数过于频繁,存在以下问题:

  3.存储电影详情页记录和短评数据全部解析后立即存入数据库。

  显然,上面的方法一看就效率低下,所以今天下午修改了相关代码,部分实现批量插入,尽可能减少与数据库的交互,从而降低时间和空间成本。

  既然出现了问题,我们再来看看这个版本,最后发现问题的原因是*敏*感*词*URL没有存储在mysql的记录表中​​,所以是在DoubanCrawler类中。

  

  执行 stmt.executeUpdate(sql) > 0 返回值 0,所以爬取为 0 的记录不会从数据库中读取,最后会在 while 循环中爬取*敏*感*词* 网站。

  解决方案:由于*敏*感*词*网站没有存储在记录中,那么对*敏*感*词*网站进行特殊处理,将if的判断条件改为if(stmt.executeUpdate(sql)>0 || frontPage.equals(url)),这样对于*敏*感*词*网站,即使没有成功的更新操作,仍然可以进入读取爬取到0的数据库的操作。

  对于第一个问题,使用批量插入操作

  具体实现如下:

  

  

  

  1. 通过正则匹配,找到符合条件的链接,加入nextLinkList集合

  2.遍历后,将数据存入数据库

  3. 在批处理操作中,使用了 addBatch() 方法和 executeBatch() 方法。注意需要添加 conn.setAutoCommit(false); mit() 表示手动提交。

  第二题,一次查询多条记录

  实现思路:一次只改一条记录,一次查询10条记录,将这10条记录存入list集合中,将原来的String类型url改为list类型urlList并传入

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线