最新版本:动易SiteFactory CMS自动采集器 V2.5.1
优采云 发布时间: 2022-11-21 09:29最新版本:动易SiteFactory CMS自动采集器 V2.5.1
动易SiteFactory CMS Collector介绍
注意:本程序需要.NET FrameWork2.0及以上版本的支持(Vista无需安装.NET FrameWork 2.0即可直接运行本程序)
特别提醒:本程序仅为东易CMS采集的辅助工具。请先在网站后台设置采集源,然后运行本程序。
1.首先修改SiteAutoSpider.exe.config文件的数据库链接字符串(可以用记事本打开)
" />
将server=(local);database=SiteFactory;uid=sa;pwd=123改为你实际的数据库地址,数据库名,登录用户名和密码
2、运行SiteAutoSpider.exe文件,可以看到如下界面:
在左侧的树形菜单中勾选需要采集
的物品,然后点击按钮开始采集
。
" />
我也是 SiteFactory 的用户。在使用过程中,我写了这个小工具,可以实现24小时无人值守,让你的网站24小时自动更新数据。
运行效果如下:
本程序全部使用原系统中的DLL,您可以放心使用。
最新信息:动态网页的采集策略
动态网页功能
网页的数据没有出现在源代码中,并且在获取新数据时 URL 也没有改变。
以尚嘉网站为例 原油期货sc2212行情-原油期货sc2212走势预测分析-尚嘉(),该页面的评论信息需要保持下降,评论数据会增加。并非所有数据都收录
在源代码中,有些数据仅根据要求更新。
采集
创意
一般有两种思路:
以商嘉网站为例 原油期货sc2212行情-原油期货sc2212走势预测分析-商嘉(),采集
本页评论信息。
1.分析数据接口,然后构造请求url进行数据请求。
分析过程
尚佳原油行情页面评论为一页到尾,不分页,动态请求评论。
首先打开检查,慢慢往下拉评论页面,观察源码的变化(也可以在【网络】选项中观察变化),发现如图所示的现象。找到js函数,然后全局查找js函数。
全局搜索发现,然后查看函数,发现使用了getVarietyContent函数,很明显是一个数据请求接口。之后你只需要找到getVarietyContent的格式就可以构造请求url了。
基本由上图确定,数据请求接口为:{}&varietyId={}&order={}&page={}
Ctrl+F 搜索函数名,可以找到具体的数据接口:。至此,我们就完成了对数据接口的解析,接下来迭代请求这个接口[{}&varietyId={}&order={}&page={}]获取所有的评论信息。值得注意的是,迭代次数不要超过总页数,这可以从预览选项中看出,见下图。
完整代码
# -*- coding: utf-8 -*-
# @Time : 2022/10/25 11:32
# @Author : wjy
# @FileName: l.py
import time
import requests
import json
def request_varietyUrl(url,timeout=5,headers=None):
"""返回获取的信息,[[{},{},...]],若到结束位置或请求失败返回None"""
ct=3
while ct>0:
try:
resp = requests.request('GET',url=url, timeout=timeout,headers=headers)
if resp.status_code==200:
result=json.loads(resp.text)
# print(result)
data_list=result['data']['list']
# print(data_list)
#判断是否为空
if len(data_list)==0:
return None
return data_list
else:
ct=ct-1
except:
print('失败')
return None
def getPages_varietyUrl(url,timeout=5):
"""返回页数,失败返回None"""
ct = 3
while ct > 0:
try:
resp = requests.request('GET', url=url, timeout=timeout)
if resp.status_code == 200:
result = json.loads(resp.text)
pageinfo = result['data']['pageinfo']
<p>
" />
pages = pageinfo['pages'] # 页数
print(pages)
return pages
else:
ct = ct - 1
except:
print('失败')
return None
def getOutcome(timeout=5, timedelay=1, headers=None,maxPage=10):
"""获取评论信息"""
# 请求
# https://www.shangjia.com/market/varietyData/getVarietyContent?type=1&varietyId=60&order=2&page=2
# base_url = 'https://www.shangjia.com/market/varietyData/getVarietyContent?type=1&varietyId=' + str(varietyId) + '&order=2&page='
base_url = 'https://www.shangjia.com/market/varietyData/getVarietyContent?type=1&varietyId=60&order=2&page='
result = request_varietyUrl(url=base_url + '1')
if result is None:
print('请求失败')
pages = getPages_varietyUrl(base_url + '1', timeout=timeout) # 获取页数
flag = False # 结束标志
pages=min(maxPage,pages)
for i in range(1, pages + 1):
print('页数:' + str(i))
url = base_url + str(i)
time.sleep(timedelay) # 延迟
result = request_varietyUrl(url=url, timeout=timeout, headers=headers)
print(result)
if __name__ == '__main__':
getOutcome()</p>
的结果
2.使用Selenium模拟浏览器点击获取数据
安装谷歌浏览器并检查版本号。
下载版本号对应的Chromedriver.exe,在项目文件夹下。
s = Service(chromedriver_path),chromedriver_path为Chromedriver.exe的绝对路径
我们使用 selenium 来模拟浏览器(Google Chrome)的行为。浏览器可以请求的,用selenium也可以请求。
当然,不同的浏览器有不同的驱动。下面列出了不同的浏览器及其对应的驱动程序:
Chrome:Firefox:发布 mozilla/geckodriver GitHub Edge:Microsoft Edge WebDriver - Microsoft Edge Developer Safari:Safari 10 中的 WebDriver 支持 | 网络套件
selenium的API说明
#chromedriver的绝对路径
driver_path
初始化一个driver,并且指定chromedriver的路径
s = Service(chromedriver_path)
driver = Chrome(service=s, options=chrome_options)
请求网页
driver.get(“https://www.baidu.com/”)
通过page_source获取网页源代码
driver.page_source
其余api见:https://selenium-python.readthedocs.io/installation.html#introduction
源代码
import os
from bs4 import BeautifulSoup
import time
from selenium.webdriver import Chrome
<p>
" />
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options # 使用无头浏览器
from selenium.webdriver.common.by import By
chrome_options = Options()
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) # =>去掉浏览器正在受到自动测试软件的控制
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument("disable-web-security")#允许重定向
chrome_options.add_argument("--headless") # => 为Chrome配置无头模式
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--start-maximized') # 最大化运行(全屏窗口),不设置,取元素会报错
base_path = os.path.dirname(os.path.abspath(__file__))
#获取chromedriver.exe的绝对路径
chromedriver_path=os.path.join(base_path,os.path.join("tools","chromedriver.exe."))
"""1.滚动下滑,获取网页 2.对html文本提取相应的数据,并转换成统一格式"""
def getOutcome(varietyUrl,timeout=5, timedelay=2, headers=None,maxPage=10):
"""获取评论信息,保存到outcome.json"""
s = Service(chromedriver_path)
driver = Chrome(service=s, options=chrome_options)
driver.implicitly_wait(timeout)#隐式等待
#请求
driver.get(varietyUrl)
pre = ''
now = 't'
ct = 0
while now != pre: # 判断页面是否到底 ///
pre = driver.find_element(by=By.XPATH, value='//*[@id="list_box"]/*[last()]')
jscode = 'window.scrollTo(0,document.body.scrollHeight)'
driver.execute_script(jscode)
time.sleep(0.5) # 等待资源加载完毕
now = driver.find_element(by=By.XPATH, value='//*[@id="list_box"]/*[last()]')
ct = ct + 1
if ct>maxPage:
break
time.sleep(timedelay)
time.sleep(timedelay)
html = BeautifulSoup(driver.page_source, "lxml")
# print(html)
info_list=html.findAll("div",class_="social-post-mini")
for info in info_list:
content=info.find_all("div",class_="content conten_href conten_first string_sub")[0].text.replace(' ','').replace('\n','')
name=info.find_all("div",class_="name")[0].text.replace(' ','').replace('\n','')
data = {
"name": name,
"content": content, # 评论内容
}
print(data)
if __name__ == '__main__':
getOutcome(varietyUrl='https://www.shangjia.com/qihuo/sc2212/')</p>
的结果