分享:优采云采集怎么采集文章好?
优采云 发布时间: 2022-12-05 19:58分享:优采云采集怎么采集文章好?
优采云采集 文章,我一文章采集三篇文章文章,再用文章,算伪原创文章,但有的收录有的不收录,如何让优采云采集的质量更高,提高收录优采云可以批量采集文章?只是用了不懂,大家多指导谢谢!
不建议使用,虽然你发布采集之后,百度收录几天内涨得很快,但是一旦百度发现你采集了大量被别人网站的内容,收录页面就会直线消失,或者做扎实的基础优化
老铁网友回复:
我还没用过,进来看看
老铁网友回复:
不建议直接使用采集的文章,三篇文章合二为一的内容不能复制,所有内容应尽量伪原创,避免与原文章内容完全相同
有了优采云 采集工具,伪原创这块可以使用5118智能原创,合作使用更方便
5118的智能原创质量也很好,剪辑后的检测原创度保证在70%左右,差不多
汇总:Python 网络数据采集(三):采集整个网站
时间:2022.5.30 15:35
博客:/cg_i
欲速则不达。
1. 采集整个网站
上一节实现了例子网站,以遍历的方式从一个链接到另一个链接。但是,如果您需要系统地对整个 网站 进行分类,或者搜索 网站 上的每个页面怎么办?然后是采集整个网站,这是一个非常耗内存的过程,尤其是在处理大的网站时,最合适的工具是使用数据库来存储采集的资源。但是,我目前还不打算*敏*感*词*运行它们。关于数据库使用的相关知识将在后面的相应章节中讨论。
一种常见且耗时的网站采集方法是从顶级页面(例如主页)开始,搜索页面上的所有链接,形成一个列表。转到 采集 这些链接的每个页面,并通过形成每个页面上找到的链接的新列表来重复一轮 采集。
为了避免一个页面被 采集 重复,链接去重非常重要。代码运行时,将所有找到的链接放在一起,存储在一个列表中,方便查询(下面的例子是指Python的set类型)。只有“新”链接才会 采集 之后从页面中搜索其他链接:
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
pages = set()
def getLinks(pageUrl):
global pages
html = urlopen(pageUrl)
bsObj = BeautifulSoup(html.read(), 'html.parser')
for link in bsObj.findAll('a'):
if 'href' in link.attrs:
if link.attrs['href'] not in pages:
newPage = link.attrs['href']
print(newPage)
pages.add(newPage)
getLinks(url)
getLinks('https://free.kuaidaili.com')
为了充分展示此网络数据 采集 示例的工作原理,我降低了前面示例中使用的“仅查找 (/free/inha) 路径”的标准。不再限制爬虫采集的页面范围,只要遇到一个页面,它就会找到所有的标签。
最初,主页是用 getLinks 处理的。然后遍历首页的每一个链接,查看是否已经在全局变量集合页面(采集的页面集合)中。如果不是,则打印到屏幕,将链接添加到页面集合,并使用 getLinks 递归处理链接。
输出结果:
/
/free/
/pricing/
/dps
/tps
/kps
/ops
/cart?p=day&t=dps&c=10&num=2500
/usercenter/dps/
/dps/fetch/
/dps/genapiurl/
/doc/dev/dps/#api
/doc/dev/dps/
/cart?p=month&t=tps&ct=dynamic
/usercenter/tps/
/tps/genapiurl/
/doc/dev/tps/#api
/doc/dev/tps/
/cart?p=month&t=kps_std&num=1
/usercenter/kps/
/kps/fetch/
/kps/genapiurl/
/doc/dev/kps/#api
/doc/dev/kps/
/cart?p=month&t=vip
/usercenter/ops/
/fetch/
/genapiurl/
/doc/api/getproxy/
/dist/
/helpcenter/
/doc/dev/quickstart/
/doc/dev/dps/#_3
/doc/dev/dps/#httpresponse
/doc/dev/dps/#_5
/doc/dev/sdk/
/doc/dev/sdk_http/
/doc/dev/tps/#_3
/doc/dev/tps/#httpresponse
/doc/dev/tps/#_5
/doc/dev/sdk_tps_http/
/doc/dev/kps/#_3
/doc/dev/kps/#httpresponse
/doc/dev/kps/#_5
/doc/dev/sdk_api_proxy/#_3
/doc/dev/ops/#_3
/doc/api/#2-api
/doc/dev/sdk_api_proxy/#_1
/doc/faq/buy/
/doc/faq/product/
/doc/faq/recharge/
/doc/faq/invoice/
javascript:void(0)
/support/
/entcustomer/
/changelog/
/tool/fetchua/
/cps/
/usercenter/
<p>
/login/
......(省略)
</p>
关于递归的警告
Python默认的递归限制(程序递归调用自身的次数)是1000次,当程序达到递归限制时就会停止(报错,RecursionError: maximum recursion depth exceeded in comparation),除非你设置一个更大的递归计数器,或其他防止其停止的方法。
解决方案:
可以将递归的深度修改得更大一些,但仍然不建议这样做。
import sys
sys.setrecursionlimit(100000) #例如这里设置为十万
2.完整代码
'''
作者:高玉涵
时间:2022.5.27 13:20
说明:抓取所有网页(爬虫版)
'''
import socket
import re
from tkinter.messagebox import NO
from types import coroutine
from typing import Counter
from urllib.request import urlopen
from urllib.parse import urljoin
from urllib.error import HTTPError
from bs4 import BeautifulSoup
def getTable(bsObj:BeautifulSoup):
try:
table = bsObj.table
except AttributeError as e:
return None
return table
def getAgentData(table:BeautifulSoup):
# 抓取到代理数据
agent_data = []
# 表头
theads = []
# 获取表头
theads = getThead(table)
try:
# 获取所有行
rows = table.findAll('tr')
except AttributeError as e:
print("TR 标签未找到!")
return None
else:
for row in rows:
# 存放代理信息
agent = {}
for t in theads:
# 逐行查找与列对应的数据
text = row.find('td', {'data-title':t})
if text is not None:
agent.setdefault(t, text.get_text())
if len(agent) != 0:
agent_data.append(agent)
return agent_data
def getThead(table:BeautifulSoup):
# 存放获取的表头值
theads = []
try:
# 遍历表格头子标签
for h in table.thead.tr.children:
# 提取标签内的值去掉前后空格
text = h.get_text().replace(" ","")
# 忽略不可见的换行符
if text != '\n':
theads.append(text)
except AttributeError as e:
print("TR 标签未找到!")
return None
else:
return theads
def getUrl(url:str):
'''
获取 URL
:param url 地址
:return 返回 bs 对象
'''
try:
html = urlopen(url, timeout=1)
<p>
except HTTPError as e:
return None
except socket.error as e:
return None
try:
bsObj = BeautifulSoup(html.read(), 'html.parser')
except AttributeError as e:
return None
except ValueError:
return None
return bsObj
def getMorePages(base_url:str, relative_url:str=""):
'''
获取更多页面
:param base_url 基本 URL 地址
:param relative_url 相对路径 URL
:return None 失败
'''
global pages # 采集过的页面
global agent_list # 保存采集到的代理数据
global pages_error_count# 访问出错页面计数器
agents = {} # 代理结构
# 拼接 URL
url = urljoin(base_url, relative_url)
bsObj = getUrl(url)
if bsObj == None:
pages_error_count += 1 # 失败页面计数
return None
for link in bsObj.findAll('a'):
if 'href' in link.attrs:
# 是新的链接
if link.attrs['href'] not in pages:
getMorePages(url, link.attrs['href'])
# 打开链接指向的页面
newUrl = urljoin(base_url, link.attrs['href'])
newObj = getUrl(newUrl)
if newObj == None:
pages.add(link.attrs['href']) # 保存处理过的页面
pages_error_count += 1 # 失败页面计数
continue # 返回到循环开始处
# 在打开的新页面里查找符合的数据
table = getTable(newObj)
if table == None:
pages.add(link.attrs['href']) # 保存处理过的页面
pages_error_count += 1 # 失败页面计数
continue # 返回到循环开始处
# 保存采集的数据
agents = getAgentData(table)
agent_list.extend(agents)
pages.add(link.attrs['href']) # 保存处理过的页面
print(f"页面 {newUrl} 成功采集 {len(agent_list)} 条数据,忽略 {pages_error_count} 个页面。")
if __name__ == '__main__':
pages = set() # 处理过的页面
agent_list = [] # 保存采集到的代理数据
pages_error_count = 0 # 访问出错页面计数器
base_url = 'https://free.kuaidaili.com/free/inha'
print(f"目标:{base_url}")
user_choice = input('是否继续(y/n):')
if user_choice not in('y','Y'):
exit(0)
getMorePages(base_url)
</p>
输出结果:
目标:https://free.kuaidaili.com/free/inha
是否继续(y/n):y
页面 https://free.kuaidaili.com/free/ 成功采集 15 条数据,忽略 3 个页面。
页面 https://free.kuaidaili.com/free/inha/ 成功采集 30 条数据,忽略 154 个页面。
页面 https://free.kuaidaili.com/free/intr/ 成功采集 45 条数据,忽略 155 个页面。
页面 https://free.kuaidaili.com/free/inha/1/ 成功采集 60 条数据,忽略 158 个页面。
页面 https://free.kuaidaili.com/free/inha/2/ 成功采集 75 条数据,忽略 159 个页面。
页面 https://free.kuaidaili.com/free/inha/3/ 成功采集 90 条数据,忽略 160 个页面。
页面 https://free.kuaidaili.com/free/inha/4/ 成功采集 105 条数据,忽略 161 个页面。
页面 https://free.kuaidaili.com/free/inha/5/ 成功采集 120 条数据,忽略 162 个页面。
......(省略)
3.下一节,继续优化这个“爬虫”程序
这种在 for 循环内部调用的递归“爬虫”出奇地低效且容易出错,您可能还会发现偶尔会丢失一点数据(或重复采集),我们将在下一节讨论这些问题。
看
Python采集网络资料(一):BeautifulSoup
Python网络数据采集(二):爬取所有网页