网站内容采集(主营业务包含网站建设,小程序开发,网络推广 )

优采云 发布时间: 2021-12-05 23:23

  网站内容采集(主营业务包含网站建设,小程序开发,网络推广

)

  主营业务包括网站建设、APP开发、小程序开发、网络推广、SEO优化,网页编辑难免需要帮助客户进行一些网站维护操作,但各行业特点这是不同的。每次我们的同事帮客户维护网站,都需要获取大量的素材。基于图像的材料易于处理。直接去百度图片找,但是文字内容不好处理。

  我们的网页编辑过去常常去一些客户的同行网站采集相关资料,然后稍微整理一下。但是,这种方法需要大量的人力,而且完全没有技巧可言。纯手工操作;有鉴于此,我们的程序开发者使用python编写了一个多线程脚本工具对采集网站段落内容进行分页,并根据设置的参数采集@自动指定网站 >,提取网站上的段落内容,保存到本机。为方便起见,现公布相关代码。转载请注明出处!

  #!/usr/bin/python

import json

import os

import requests

import threading

import re

import time

import sys

import colorama

colorama.init(autoreset=True)

#打开文件

with open('config.json','r') as f:

    data = json.load(f)

    f.close()

def toInt(num):

if num !='':

return int(num)

else:

return 0

thead_count = 0    #待结束的进程数

start_ = toInt(data['start']) #分页起始值

end_ = toInt(data['end'])   #分页结束值

url_ = data['url']   #入口地址

urlinclude = data['urlinclude']   #URL必须包含的字符

urlunclude = data['urlunclude'] #URL不能包含的字符

textinclude = data['textinclude'] #内容中必须包含的内容

textunclude = data['textunclude'] #内容中不能包含的字符

textreplace = data['textreplace'] #需要过滤的字符

textminsize = toInt(data['textminsize']) #有效段落的最少字符数

textmaxsize = toInt(data['textmaxsize']) #有效段落的最大字符数

encoding_ = data['encoding'] #页面编码

starttag = data['starttag'] #内容提取开始字符

endtag = data['endtag'] #内容提取结束字符

sleepTime = toInt(data['sleep']) #每次请求间隔

jsonkey = data['jsonkey'] #JSON格式数据返回时的字段

headers_ = data['headers'] #request请求主机头参数

todayStr = time.strftime("%Y%m%d",time.localtime())

total = 0

if encoding_=='':

encoding_ = 'utf-8'

    

#日志保存

def doLog(vstr):

    with open(todayStr + ".log",'a') as fo:

        if vstr !="":

            fo.writelines(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) + "\t" + vstr + "\n")

        else:

            fo.writelines(time.strftime("\n"))

            

    fo.close()

def saveText(vstr):

global total

if vstr !='':

#doLog('需要保存的内容长度'+str(len(vstr)))

#判断不允许包含的内容

if len(textunclude)>0:

for tu_ in textunclude:

if tu_!='':

if vstr.find(tu_) !=-1:

#doLog(vstr + "】中存在不允许的字符:" + tu_)

return ""

#处理替换内容

if len(textreplace)>0:

for vi in textreplace:

if vi!='':

vstr = vstr.replace(vi,'')

print("\033[0;32;40m\t 收集的内容长度:" + str(len(vstr)) + "\t\033[0m ")

total = total +1

with open("采集结果.txt",'a') as fo:

fo.writelines(vstr+"\n")

fo.close()

def getFromUrl(vurl):

global thead_count,start_time

if vurl !='':

print('即将从' + vurl + '页面获取可用链接')

#提取主网址

domain = ""

if vurl.find('://') !=-1:

domain = vurl[0:vurl.find('/',vurl.find('://')+4)]

else:

domain = vurl[0:vurl.find('/')]

res = requests.get(vurl,"",headers=headers_ if len(headers_)>0 else {},timeout=3)

if jsonkey !='':

_json = res.json()

if _json[jsonkey] !='':

htmlStr = _json[jsonkey]

else:

print("================== ERROR ===================")

else:

htmlStr = res.text

#print(htmlStr)

a_href =re.findall('0:

for u1 in urlunclude:

if i.find(u1) !=-1:

urlFlag = 0

print("\033[0;31;40m\t" + i + "\t无效\033[0m ")

break

#判断必须包含的内容

if urlFlag>0 and len(urlinclude)>0:

inFlag = 0

for u2 in urlinclude:

if i.find(u2) !=-1:

inFlag = 1

break

if inFlag0:

print('延时' + str(sleepTime) + '秒后开始采集')

time.sleep(sleepTime)

doLog('开始采集:' + i)

res2 = requests.get(i,"",headers=headers_ if len(headers_)>0 else {},timeout=3)

html_ = res2.text

if html_ !='':

htmlFlag = 1

#判断是否包含指定内容

if len(textinclude)>0:

if html_.find(textinclude) !=-1:

htmlFlag = 1

else:

htmlFlag = 0

if htmlFlag= _endpos:

_endpos = len(html_)

#根据标签,提取内容

html_ = html_[_startpos:_endpos]

#过滤掉html代码,提取纯中文

html_ = html_.replace(&#39;&#39;,"</p>\r\n") #避免整段HTML代码都没换行

html_ = re.sub(r&#39;]*>&#39;,&#39;&#39;,html_)

#doLog(i + &#39;:&#39; + html_)

#对内容进行分割

tmpArr = html_.split("\r\n")

for ti in tmpArr:

ti2 = ti.strip().replace("  "," ")

if len(ti2)>textminsize and len(ti2)textmaxsize:

print(i + &#39;的内容长度为:&#39; + str(len(ti2)))

#内容过长,尝试再次分段

arr2 = ti2.replace("\r","\n").split("\n")

for tj in arr2:

tj2 = tj.strip().replace("  "," ")

print(&#39;当前段落长度为:&#39; + str(len(tj2)))

if len(tj2)>textminsize and len(tj2)textmaxsize:

# doLog(i + &#39;-->&#39; + tj2)

else:

print(&#39;段落不符合设定要求&#39; + str(len(ti2)))

print(i)

print(vurl + " 采集完成,退出线程\n")

if thead_count==1:

print(&#39;任务已完成,共用时:&#39;+str(formatFloat(time.time()-start_time)) + &#39;s&#39;)

print(&#39;共计:&#39; + str(total))

#退出整个程序

sys.exit()

else:

if thead_count>0:

thead_count -= 1

else:

if thead_count>0:

thead_count -= 1

print("程序成功启动")

if start_

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线