Python爬取学校网站文章,存储到MySQL

依然范特西╮ 提交于 2020-11-30 12:09:23

Python爬取学校网站文章,存储到MySQL

简介

爬取学校新闻网站文章,包括标题,作者,日期,阅读量和文章内容,并储存在MySQL

思路

我用到的是requests库,先获取网页源码,并用pyquery提取所需信息,然后用pymysql存储到数据库中。

爬取问题与解决

在提取所需信息时,包括标题,作者,时间,文章都是可以直接在网页源码中截取的,但是在提取阅读量时,却发现是通过post方法获取的。
因为我找到了
在这里插入图片描述

因此我打算直接post,但是在找接口的时候,却找到了这个


$.ajax(
{
   
   type:'post',
url:'/interFace/getDocReadCount.do?id=506980',
timeout:2000,
success:function(ret)
{
   
   $('#readcount').html($.trim(ret))},
error:function(ret)
{
   
   $.ajax({
   
   
type:'post',
url:'/ecms_external?method=syncOfflineVisitCount',
data:'type=doc&requestUrl='+location.href,
timeout:2000,
success:function(ret){
   
   
$('#readcount').html(ret);},
error:function(){
   
   $('#readcount').html(0);
}});}});

我直接好家伙,因为我可以通访问第三行的地址获取到阅读量。
url:’/interFace/getDocReadCount.do?id=506980’,
根据过去经验,一般可以在网页header里找到id,但是纵览整个页面,包括请求头内,只有这一行有该文章的id,所以只能直接通过提取字符串来获取。

存储问题与解决

    # 保存文章信息
    def __save_art(self, head, content):
        key = 'title' + ', author' + ', readcount' + ', time' + ', content'  # 键名称

        # 值内容
        value = ' \'' + head["title"] + '\', \'' + head["author"] \
                + '\', \'' + head["readCount"] + '\', \'' \
                + head["time"] + '\', \'' + content + '\''
        sqlInsert = 'INSERT INTO %s(%s) values(%s)' % (self.__table_name, key, value)  # 提交内容
        self.__cursor.execute(sqlInsert)

大部分文章都可以正常存储,在MySQL里,但个别文章中出现了单引号之类的符号,直接导致程序终止,SQLInsert语句语法错误,因此需要转义字符串内容。我使用的是
pymysql.escape_string(text)
修改后不再报错

    def __save_art(self, head, content):
        key = 'title' + ', author' + ', readcount' + ', time' + ', content'  # 键名称

        # 值内容
        value = ' \'' + pymysql.escape_string(head["title"]) + '\', \'' + pymysql.escape_string(head["author"]) \
                + '\', \'' + head["readCount"] + '\', \'' \
                + head["time"] + '\', \'' + pymysql.escape_string(content) + '\''
        sqlInsert = 'INSERT INTO %s(%s) values(%s)' % (self.__table_name, key, value)  # 提交内容
        self.__cursor.execute(sqlInsert)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!