[Selenium 응용 실습] Baidu 포함 사이트의 링크 수를 자동으로 모니터링하는 방법

얼마 전에 Python 크롤러를 사용하여 Baidu 사이트: 명령의 결과를 자동으로 크롤링하는 방법에 대한 기사를 썼는데 해당 솔루션에는 문제가 있습니다: 불안정하고 포함 여부만 확인합니다. 얼마나 많은 링크가 포함되어 있는지 명확하게 알 수 없습니다.이 작업은 수행할 수 없습니다.수집 수의 증가 여부를 지속적으로 관찰하려는 목적을 달성하기 위해 수집 수를 정확하게 모니터링할 수 있는 Selenium을 사용하여 구현 계획을 작성했습니다.

종속성 설치

import json
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
import re
import requests
from lxml import etree
import time

브라우저 인스턴스 만들기

myService = Service(r'./../chromedriver')
options = webdriver.ChromeOptions()
# options.add_argument('headless') #如果想不弹出浏览器则加上这项配置
myChrome = webdriver.Chrome(service=myService, options=options)
myChrome.implicitly_wait(10)

Baidu 엔진에 접속하여 사이트: [도메인 이름]을 자동으로 입력한 후 자동으로 검색 버튼을 클릭합니다.

domain = 'jentian.com'
myChrome.get('https://www.baidu.com')
keywordInput = myChrome.find_element(By.ID, 'kw')
keywordInput.send_keys('site:' + domain)
searchBtn = myChrome.find_element(By.ID, 'su')
searchBtn.click()

xpath를 통해 포함된 수량 문자열을 얻고 정규 매칭을 사용하여 포함된 수량을 찾습니다.

time.sleep(3)  # 点击搜索按钮后要过一会再对页面文本进行解析, 因为需要时间跳转及加载内容
dom = etree.HTML(myChrome.page_source)
resultStringArr = dom.xpath('//*[@id="content_left"]/div[1]/div/p[1]/b/text()')
resultCount = 0
if len(resultStringArr) > 0:
    resultCountString = resultStringArr[0]
    resultCountGroup = re.compile(r'\d+').findall(resultCountString)
    if resultCountGroup:
        resultCount = ''.join(resultCountGroup)
if int(resultCount) > 0:
    msg = '百度已收录' + domain + ',收录数量:' + str(resultCount)
else:
    msg = '百度未收录' + domain
print('抓取完毕!!!', msg, '\n')

마지막으로, 크롤링 결과는 자동으로 기업 WeChat 그룹에 전송되어 자동 보고 및 데이터 수집 목적을 달성합니다.

qiWeiWebHook = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=**'#请自动替换成自己的webhook链接
postHeaders = {
    
    
    'Content-Type': 'application/json'
}
msgData = {
    
    
    "msgtype": "text",
    "text": {
    
    
        "content": msg
    }
}
requests.post(qiWeiWebHook, headers=postHeaders, data=json.dumps(msgData))

마지막으로 예약된 자동 보고 목적을 달성하기 위해 포함된 결과를 매시간 자동으로 크롤링하여 전송하는 루프를 추가했으며 전체 코드는 다음과 같습니다.

#通过抓取某个域名的site指令结果,判断是否已被百度收录代码
import json
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
import re
import requests
from lxml import etree
import time

def crawlBaiduPickupData():
    myService = Service(r'./../chromedriver')
    options = webdriver.ChromeOptions()
    # options.add_argument('headless') #如果想不弹出浏览器则加上这项配置
    myChrome = webdriver.Chrome(service=myService, options=options)
    myChrome.implicitly_wait(10)
    domain = 'jentian.com'
    while True:
        myChrome.get('https://www.baidu.com')
        keywordInput = myChrome.find_element(By.ID, 'kw')
        keywordInput.send_keys('site:' + domain)
        searchBtn = myChrome.find_element(By.ID, 'su')
        searchBtn.click()
        time.sleep(3)  # 点击搜索按钮后要过一会再对页面文本进行解析, 因为需要时间跳转及加载内容
        dom = etree.HTML(myChrome.page_source)
        resultStringArr = dom.xpath('//*[@id="content_left"]/div[1]/div/p[1]/b/text()')
        resultCount = 0
        if len(resultStringArr) > 0:
            resultCountString = resultStringArr[0]
            resultCountGroup = re.compile(r'\d+').findall(resultCountString)
            if resultCountGroup:
                resultCount = ''.join(resultCountGroup)
        if int(resultCount) > 0:
            msg = '百度已收录' + domain + ',收录数量:' + str(resultCount)
        else:
            msg = '百度未收录' + domain
        print('抓取完毕!!!', msg, '\n')
        qiWeiWebHook = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*'
        postHeaders = {
    
    
            'Content-Type': 'application/json'
        }
        msgData = {
    
    
            "msgtype": "text",
            "text": {
    
    
                "content": msg
            }
        }
        requests.post(qiWeiWebHook, headers=postHeaders, data=json.dumps(msgData))
        time.sleep(3600)  # 每小时跟进一次

if __name__ == '__main__':
    crawlBaiduPickupData()

추천

출처blog.csdn.net/one_and_only4711/article/details/126557452