公众号简单爬虫--把公众号文章全部转载到网站(三)

公众号简单爬虫--把公众号文章全部转载到网站(三)

 

根据上一篇的方法,我们得到了一个包含标题,时间,作者,封面,文章连接等信息的json文件.接下来,就是要提取文章详细信息和把一系列的信息写入数据库.

 

这里先说明几点,我们转贴公众号文章,会有个问题,就是图片会不显示.由于网站源码是php的,所以我们要自己写一个 img.php文件放在网站根目录下,作用是让转贴的图片能显示出来.

代码如下:


 

公众号简单爬虫--把公众号文章全部转载到网站(三)_第1张图片

 

那么所有的图片都要修改,详细见下面代码.

再有就是封面图,网站没用提供外链功能,那么我们可以自己处理一下,把上面的img.php文件复制一份,拷贝到upload文件夹,在数据库里填上 /img.php?p={图片连接},这样就可以连封面都直接用外链图片了.

 

公众号简单爬虫--把公众号文章全部转载到网站(三)_第2张图片

 

最后放效果视频,九百多篇文章大概用了9分来钟(可以从40秒直接挑到8分42秒).有9篇文章错误是在采集历史数据的时候就出问题,不管它们了.

还有些写入数据库的时候会返回提示信息编码错误之类的,不用管它们,没用问题的.

 

爬虫程序运行效果

视频连接

 

最后上完整代码:

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 19 10:33:40 2019
获取每篇文章内容,并修改图片显示 ,写入数据库
@author: 浩海泛舟
"""
import 历史消息爬虫 as 包_历史消息爬虫
import codecs as 包_编码
import json
import re as 包_正则
import pymysql

def 方法_读取json文件(路径):
    文件列表 = []
    with 包_编码.open(路径, 'r', 'utf-8-sig') as 文件1:        
        文件 = 文件1.readlines()  # 读出来的是一个list
        新_文件 = json.loads(文件[0], encoding='utf-8')
        for i in 新_文件:
            文件列表.append(i)
    return 文件列表

def 方法_替换图片(内容):
    图片提取_规则 = 包_正则.compile('')
    图片路径_规则 = 包_正则.compile('data-src="(.*?)"')
    图片列表 = 包_正则.findall(图片提取_规则,内容)
    替换列表 = []
    for 图片 in 图片列表:
        图片路径 = 包_正则.findall(图片路径_规则,图片)
        图片路径 = 图片路径[0]
        图片修改 = '<p><img src="../img.php?p=' + 图片路径 + '"></p>'
        原图片 = ''
        替换 = [原图片,图片修改]
        替换列表.append(替换)
    return 替换列表


#print(文章列表)
def 方法_获取并修改正文内容(网址):
    网页 = 包_历史消息爬虫.方法_获取网页(网址)
    内容抽取_规则 = 包_正则.compile('
(.*?)
',包_正则.DOTALL) 内容抽取 = 包_正则.findall(内容抽取_规则,网页) 内容抽取 = 内容抽取[0].replace(r'\n','') 图片替换列表 = 方法_替换图片(内容抽取) for 图片替换 in 图片替换列表: 内容抽取 = 内容抽取.replace(图片替换[0],图片替换[1]) return 内容抽取 def 方法_插入数据(sql语句): # 打开数据库连接 数据库 = pymysql.connect("数据库网址", "用户名", "密码", "数据库") # 使用cursor()方法获取操作游标 指针操作 = 数据库.cursor() # SQL 插入语句 try: # 执行sql语句 指针操作.execute(sql语句) # 提交到数据库执行 数据库.commit() except: # Rollback in case there is any error 数据库.rollback() # 关闭数据库连接 数据库.close() def 方法_总方法(路径): 文章列表 = 方法_读取json文件(路径) #倒序,时间久的先处理 文章列表.reverse() a = 0 写入错误列表 = [] for 文章 in 文章列表: 时间 = 文章[1] 标题 = 文章[2] 作者 = 文章[3] 描述 = 文章[4] 封面 = '/img.php?p=' + 文章[6] 连接 = 文章[5] try: 正文内容 = 方法_获取并修改正文内容(连接) except: 写入错误列表.append(文章) continue # SQL 插入语句 sql = """INSERT INTO tpt_article(tid,open,commend,choice,title,author,time,pic,description,content) VALUES (1,1,1,1, '%s', '%s', %s, '%s', '%s', '%s')""" %(标题,作者,时间,封面,描述,正文内容) 方法_插入数据(sql) a+=1 print('已完成',a ,'个数据插入') #if a ==5: # break 包_历史消息爬虫.方法_保存json文件('写入数据库错误列表信息.json',写入错误列表) return if __name__ == '__main__' : 路径 = '魂斗罗公众号信息.json' #文章列表 = 方法_读取json文件(路径) #文章列表.reverse() #print(文章列表[907]) 方法_总方法(路径)

 

感谢各位的阅读,望勿喷。

你可能感兴趣的:(高效办公)