分享文章:自媒体文章批量采集伪原创(自媒体文章伪原创工具)
优采云 发布时间: 2022-11-18 08:20阅读本文提示词:自媒体文章伪原创tools,采集文章automatic伪原创,文章batch伪原创 方法
自媒体文章批量采集伪原创处理助手,迅瓜瓜是B2B发布模式,打破传统在线发布状态的云发布系统,俗称“迅瓜瓜云发布” ”。也就是说,我们只需要将一定时间内要发布的头条新闻和内容导入新闻发布系统一次,就可以自动发布一个月甚至一年的信息,无需人工操作,而且我们可以每天发布详细信息。您可以随时了解出版趋势。即使电脑电源关闭,也不会延迟信息的发布过程,实现真正的无人值守发布。对于您的商务旅行,这是必不可少的发布工具。
自媒体文章批次采集:
1. 自媒体平台文章采集服务平台。
专业的采集自媒体网站内容发布系统,如新浪微博、微信、今日头条等,可快速获取网站文章。
2. 网站文章采集主要门户网站的工具。
自取和手动选择,此功能同第一项。
3.支持在线编辑发布文章。
SEO文章采集工具:谁有它?目前最好的采集工具是托图数据信息。
3、实时跟踪网站文章更新,新闻发布时间段,以及原创文章、伪原创文章、转发文章 将 文章 发布到此博客、此站点、此站点、此站点、此站点的机会
另外,网上地址
SEO 每天发布文章 的频率,即每天发布文章。
4.支持在线编辑发布文章的采集功能,支持在线编辑,伪原创文章,转载文章
5、用户需要下载一辆文章电动车,请尝试下一步下载功能。
SEO文章采集 工具:谁有它?首先从SEO的角度来说,我们提倡的文章是针对原创的。你怎么看?
1.从SEO的角度来看,原创文章是最重要的。
在百度的索引中,收录了指定的关键词,但用户需要从网上查找和修改相关内容。
另外,如果互联网上已经存在与搜索内容相同或相似的内容,则该页面将被视为被盗用。
此外,如果相同的 文章 在 Internet 上可用,则视为盗窃。因此,该页面将被视为被盗。
百度会将网站归为原创内容。
2、
相关文章
解读:爬取百度学术文章及文本挖掘分析
可以看出我们需要填写关键词来搜索我们需要的类型文章。这里我就以“牛肉品质”为例进行搜索。我们在搜索栏中右击,点击查看源代码。
用同样的方法查“百度”。
这样做的目的是利用selenium进行自动输入和搜索。
这里写一个方法,传入一个参数——要输入的关键词。我用的是Google Chrome的驱动,也可以用PhantomJS的无界面驱动。
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import pandas as pd
import requests
import re
from collections import defaultdict
def driver_open(key_word):
url = "http://xueshu.baidu.com/"
# driver = webdriver.PhantomJS("D:/phantomjs-2.1.1-windows/bin/phantomjs.exe")
driver = webdriver.Chrome("D:\\Program Files\\selenium_driver\\chromedriver.exe")
driver.get(url)
time.sleep(10)
driver.find_element_by_class_name('s_ipt').send_keys(key_word)
time.sleep(2)
driver.find_element_by_class_name('s_btn_wr').click()
time.sleep(2)
content = driver.page_source.encode('utf-8')
driver.close()
soup = BeautifulSoup(content, 'lxml')
return soup
然后,进入搜索界面,我们继续分析。我们需要爬取文章的话题,同时需要翻页,爬取多个页面。
如何实现发现?我们点击多个页面,观察网页的URL:
第一页:
牛肉品质&pn=0&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8&f=3&sc_f_para=sc_tasktype%3D{firstSimpleSearch}&sc_hit=1
第二页:
牛肉品质&pn=10&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8&f=3&sc_f_para=sc_tasktype%3D{firstSimpleSearch}&sc_hit=1
第三页:
牛肉质量&pn=20&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8&f=3&sc_f_para=sc_tasktype%3D{firstSimpleSearch}&sc_hit=1
可以发现这三个页面的url中只有一个地方发生了变化,就是“pn”的值,从0开始,每次增加10,所以我们可以通过这个很好的实现翻页。
def page_url_list(soup, page=0):
fir_page = "http://xueshu.baidu.com" + soup.find_all("a", class_="n")[0]["href"]
urls_list = []
for i in range(page):
next_page = fir_page.replace("pn=10", "pn={:d}".format(i * 10))
response = requests.get(next_page)
soup_new = BeautifulSoup(response.text, "lxml")
c_fonts = soup_new.find_all("h3", class_="t c_font")
for c_font in c_fonts:
url = "http://xueshu.baidu.com" + c_font.find("a").attrs["href"]
urls_list.append(url)
return urls_list
下一步是对感兴趣的地方实施爬行。当我们进入详情页时,我们需要抓取的东西包括:标题、摘要、出版来源、引用和关键词。
还是按照老办法,把这些需要爬取的东西一一查看源码,用css select方法处理。
def get_item_info(url):
print(url)
# brower = webdriver.PhantomJS(executable_path= r"C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe")
# brower.get(url)
# time.sleep(2)
# more_text = brower.find_element_by_css_selector('p.abstract_more.OP_LOG_BTN')
# try:
# more_text.click()
# except:
# print("Stopping load more")
# content_details = brower.page_source.encode('utf-8')
# brower.close()
# time.sleep(3)
content_details = requests.get(url)
soup = BeautifulSoup(content_details.text, "lxml")
# 提取文章题目
title = ''.join(list(soup.select('#dtl_l > div > h3 > a')[0].stripped_strings))
# 提取文章作者
authors = ''.join(str(author_) for author_ in list(soup.select('div.author_wr')[0].stripped_strings)[1:])
# 提取摘要
abstract = list(soup.select('div.abstract_wr p.abstract')[0].stripped_strings)[0].replace("\u3000", ' ')
# 提取出版社和时间
fir_publish_text = list(soup.select('p.publish_text'))
if len(fir_publish_text) == 0:
publish_text = "NA"
publish = "NA"
year = "NA"
else:
publish_text = list(soup.select('p.publish_text')[0].stripped_strings)
publish = publish_text[0]
publish = re.sub("[\r\n ]+", "", publish)
<p>
publish_text = ''.join(publish_text)
publish_text = re.sub("[\r\n ]+", "", publish_text)
# 提取时间
match_re = re.match(".*?(\d{4}).*", publish_text)
if match_re:
year = int(match_re.group(1))
else:
year = 0
# 提取引用量
ref_wr = list(soup.select('a.sc_cite_cont'))
if len(ref_wr) == 0:
ref_wr = 0
else:
ref_wr = list(soup.select('a.sc_cite_cont')[0].stripped_strings)[0]
# 提取关键词
key_words = ','.join(key_word for key_word in list(soup.select('div.dtl_search_word > div')[0].stripped_strings)[1:-1:2])
# data = {
# "title":title,
# "authors":authors,
# "abstract":abstract,
# "year":int(year),
# "publish":publish,
# "publish_text":publish_text,
# "ref_wr":int(ref_wr),
# "key_words":key_words
# }
return title, authors, abstract, publish_text, year, publish, ref_wr, key_words
</p>
这里特别说明一下:在爬取摘要的时候,有一个JS动态加载,“更多”样式的加载按钮。所以,如果我想把所有的摘要都爬下来,我可能不得不用selenium来模仿点击操作(我在代码中注释的地方)。不过我没有用这个方法,因为我多次访问网页,可能会出现很多问题,一是速度问题,二是容易被服务器拒绝访问,所以这里我只爬取了摘要的一部分。
然后保存爬取的数据。这里我后面直接用pandas读取处理,数据量不大,所以直接保存成csv格式。
def get_all_data(urls_list):
dit = defaultdict(list)
for url in urls_list:
title, authors, abstract, publish_text, year, publish, ref_wr, key_words = get_item_info(url)
dit["title"].append(title)
dit["authors"].append(authors)
dit["abstract"].append(abstract)
dit["publish_text"].append(publish_text)
dit["year"].append(year)
dit["publish"].append(publish)
dit["ref_wr"].append(ref_wr)
dit["key_words"].append(key_words)
return dit
def save_csv(dit):
data = pd.DataFrame(dit)
columns = ["title", "authors", "abstract", "publish_text", "year", "publish", "ref_wr", "key_words"]
data.to_csv("abstract_data.csv", index=False, columns=columns)
print("That's OK!")
至此,程序完成,接下来开始爬取前20页的数据:
if __name__ == "__main__":
key_word = "牛肉品质"
soup = driver_open(key_word)
urls_list = page_url_list(soup, page=20)
dit = get_all_data(urls_list)
save_csv(dit)
爬完之后,我们用pandas来阅读。
data = pd.read_csv("abstract_data.csv")
data.head()
2. 数据清洗与分析
在publish栏目中,还有一些小问题需要处理。如下,逗号出现在一些行中。
我们摆脱它。
data["publish"] = data["publish"].map(lambda x: str(x).replace(',', ""))
同时我发现南京农业大学在出版社的栏目中有两个表述(“Nanjing Agricultural University”,南京农业大学)。其实都是同一个意思,需要统一。
data.publish = data.publish.map(lambda x: re.sub("(.+大学$)", r"《\1》", x))
这样所有以“大学”结尾的出版社统一加“《》”。
data.nunique()
可以看出,在这200篇论文中,只有91家出版社发表过。我们来统计一下出版物数量最多的前10家出版社的出版情况。
data.publish.value_counts()[:10]
可视化结果:
先用seaborn绘制
其次,使用网页可视化工具plotly展示
对于“牛肉品质”相关的文章,大家倾向于投给《食品科学》、《肉类研究》、《延边大学》等期刊。
接下来,让我们一起来看看文章这几年的发表吧。
首先我们看一下数据,看看有没有缺失值
data.info()
这里红框里,时间一栏只有197条数据,说明缺失了三个值。因为缺失值很少,所以我们直接删除。
df = data.dropna(axis=0, how="any")
df.info()
这里因为“年”列是浮点型,所以需要进行类型转换。
df["year"] = df["year"].map(lambda x: str(int(x)))
df["year"].value_counts()
对于可视化:
plt.figure(figsize=(12, 5))
# sns.set_style("darkgrid",{"font.sans-serif":['simhei','Droid Sans Fallback']})
temp = df["year"].value_counts()
sns.countplot(
x = df.year,
palette = "Set3",
order = temp.index
)
虽然你可以通过这张图看到哪些年文章发表的文章最多,但是它不能显示随时间变化的趋势,看到发表趋势。让我们通过时间序列分析来展示它。
df["year"] = pd.to_datetime(df["year"])
df["year"].value_counts().resample("Y").sum().plot.line()
这显示了随时间推移发布的牛肉质量的 文章 趋势。然而,它仍然不够漂亮。让我们使用网络可视化工具 plotly 再次展示它。
这张图可以更好的展现1997年到2018年肉牛品质文章的发表,图片下方还有一个时间条,可以来回拖动放大,这是最大的好处使用网络可视化工具,可以更生动具体地可视化。
接下来,我们看看哪些作者在 1997 年至 2018 年间发表的 文章 最多。
data.authors.value_counts()[:10]
考虑到发表文章的作者数量不统一,我们只提取第一作者进行分析。
data["authors_fir"] = data.authors.map(lambda x: x.split(",")[0])
len(data["authors_fir"].unique())
得出的结论是,共有 171 位不同的作者作为第一作者发表了关于“牛肉品质”的文章。
data.authors_fir.value_counts()[:10]
让我们来看看文章万法春老师发表的文章最多的是哪五篇。
wfc = data[data["authors_fir"] == "万发春"]["title"]
wfc = pd.DataFrame(np.array(wfc), columns=["Title"], index=[1,2,3,4,5])
wfc
三、词云展示
这里,我们直接使用关键词进行云词展示,因为摘要不够完整,这样也避免了分词处理。
docs = list(data["key_words"].map(lambda x: x.split(",")))
from juba import Similar
S = Similar(docs)
# 词汇表
S.vocabularyList
# 前100个词汇量
tags = S.vocabulary
sort_tage = sorted(tags.items(), key=lambda x: x[1], reverse=True)
sort_tage[:100]
# 打印出词汇和该词汇的出现次数
for v, n in sort_tage[:100]:
print (v + '\t' + str(int(n)))
然后,将结果导入到中国,如下图:
然后,设置字体和背景图像。需要注意一点:中文需要自己加载字体。我使用微软雅黑字体(可在线下载)。
得到的词云:
至此,第三部分完成,下面我们进行文章相似度分析。
4. 文章相似度分析
考虑到本次爬取没有完整的文章,摘要不完整,所以只用关键词进行分析,所以可能不准确,引入main方法。但是,稍后我将选择一个文本数据集并执行全文相似性分析。
Juba使用余弦相似度cosine_sim(self, dtm=none)函数计算最长的文档相似度,用于计算第一个文档与其他文档的相似度。其中dtm有3个参数选项,分别是:“tfidf_dtm”(词频逆文档频率模式)、“prob_dtm”(概率模式)、“tf_dtm”(词频模式)。
sim = S.cosine_sim(dtm="prob_dtm")
sim.insert(0, 1)
data["similar"] = sim
data
然后,我从高到低排名
data.sort_values(by="similar", ascending=False)
可以看出文章的相似度很低,这也符合文章发表的规律。