c爬虫抓取网页数据(*敏*感*词*网站存储7万多条记录()时间送达!)
优采云 发布时间: 2022-02-04 12:16c爬虫抓取网页数据(*敏*感*词*网站存储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并传入