最新版本:动易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[&#39;pages&#39;]  # 页数

               print(pages)

               return pages

           else:

               ct = ct - 1

       except:

           print(&#39;失败&#39;)

           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 = &#39;https://www.shangjia.com/market/varietyData/getVarietyContent?type=1&varietyId=&#39; + str(varietyId) + &#39;&order=2&page=&#39;

   base_url = &#39;https://www.shangjia.com/market/varietyData/getVarietyContent?type=1&varietyId=60&order=2&page=&#39;

   result = request_varietyUrl(url=base_url + &#39;1&#39;)

   if result is None:

       print(&#39;请求失败&#39;)

   pages = getPages_varietyUrl(base_url + &#39;1&#39;, timeout=timeout)  # 获取页数

   flag = False  # 结束标志

   pages=min(maxPage,pages)

   for i in range(1, pages + 1):

       print(&#39;页数:&#39; + str(i))

       url = base_url + str(i)

       time.sleep(timedelay)  # 延迟

       result = request_varietyUrl(url=url, timeout=timeout, headers=headers)

       print(result)

if __name__ == &#39;__main__&#39;:

   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(&#39;excludeSwitches&#39;, [&#39;enable-automation&#39;]) # =>去掉浏览器正在受到自动测试软件的控制

chrome_options.add_experimental_option(&#39;useAutomationExtension&#39;, False)

chrome_options.add_argument("disable-web-security")#允许重定向

chrome_options.add_argument("--headless")  # => 为Chrome配置无头模式

chrome_options.add_argument(&#39;--no-sandbox&#39;)

chrome_options.add_argument(&#39;--disable-gpu&#39;)

chrome_options.add_argument(&#39;--disable-dev-shm-usage&#39;)

chrome_options.add_argument(&#39;--start-maximized&#39;)  # 最大化运行(全屏窗口),不设置,取元素会报错

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 = &#39;&#39;

   now = &#39;t&#39;

   ct = 0

   while now != pre:  # 判断页面是否到底           ///

       pre = driver.find_element(by=By.XPATH, value=&#39;//*[@id="list_box"]/*[last()]&#39;)

       jscode = &#39;window.scrollTo(0,document.body.scrollHeight)&#39;

       driver.execute_script(jscode)

       time.sleep(0.5)  # 等待资源加载完毕

       now = driver.find_element(by=By.XPATH, value=&#39;//*[@id="list_box"]/*[last()]&#39;)

       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(&#39; &#39;,&#39;&#39;).replace(&#39;\n&#39;,&#39;&#39;)

       name=info.find_all("div",class_="name")[0].text.replace(&#39; &#39;,&#39;&#39;).replace(&#39;\n&#39;,&#39;&#39;)

       data = {

           "name": name,

           "content": content,  # 评论内容

      }

       print(data)

if __name__ == &#39;__main__&#39;:

   getOutcome(varietyUrl=&#39;https://www.shangjia.com/qihuo/sc2212/&#39;)</p>

  的结果

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线