微信朋友圈得内容可以爬取吗?看完这篇你心里就有底了

网上搜索爬取微信圈内容,信息量少得可怜,几乎都是第三方库整个微信朋友数量或者微信朋友信息,整个结霸 弄个数据分析。

那么朋友圈内容到底可以爬取吗?

因为工作需要所以摸索了些门道出来。

 

使用fiddler或者是使用小尿壶(Charles)来进行抓包 几乎是没有什么需要得信息得。或者是使用mitmproxy进行拦截 也是无用得。微信对外得接口少之又少,但有一点是微信公众号可以使用这些获取到需要得内容,具体得有时间在写一篇获取公众号文章得博客,公众号文章抓取有几个渠道可以参考:搜狗微信、python有个第三方库获取得内容和搜狗微信得一个样,微信公众平台有接口可以获取到公众号内容。 

 

言归正传接着朋友圈内容

采用得方法就是  python + appium + selenium

也可以使用  模拟器自带得操作录制,进行记录你得自动化操作  可以省去 appium得配置  直接自动化吧,这是个简便得土方法太low

 

 

apium得安装与使用 在这就不描述了,网上一大堆。

在这里主要就是说一下思路:


import os , re
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# from pymongo import MongoClient
from time import sleep
from processor import Processor
from config import *


class Moments():
    def __init__(self):
        self.desired_caps = {
            'platformName': PLATFORM,
            'deviceName': DEVICE_NAME,
            'appPackage': APP_PACKAGE,
            'appActivity': APP_ACTIVITY,
            'noReset': True
        }
        self.driver = webdriver.Remote(DRIVER_SERVER, self.desired_caps)
        self.wait = WebDriverWait(self.driver, 300)

    def login(self):
        print('正在登陆中——————')
        sleep(5)
        login = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/drq')))
        login.click()
        print('*****')
        sleep(2)
        # 输入手机号
        phone = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/ji')))
        phone_num = input('请输入手机号')
        sleep(2)
        phone.send_keys(phone_num)
        print('点击下一步中')
        sleep(2)
        button = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/ast')))
        button.click()
        sleep(2)
        pass_w = input('请输入密码:')
        sleep(2)
        password = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/ji')))
        password.send_keys(pass_w)
        sleep(2)
        login = self.driver.find_element_by_id('com.tencent.mm:id/ast')
        login.click()

        # 提示 是否导入通讯录
        tip = self.wait.until(EC.element_to_be_clickable((By.ID, 'com.tencent.mm:id/au9')))
        tip.click()

    def enter(self):
        """
        进入朋友圈
        :return:
        """
        sleep(10)
        print('等待10秒')
        # 搜索
        print('点击搜索')
        moments = self.wait.until(EC.presence_of_element_located((By.XPATH, '//android.widget.TextView[@content-desc="搜索"]')))
        moments.click()
        #搜索框

        print('搜索内容')
        sousuo = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/ji')))
        sleep(2)
        sou = input('请输入对方账户:')
        sousuo.send_keys(sou)
        sleep(2)

        print('点击固定用户 ')
        cli = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/oj')))

        cli.click()
        sleep(2)
        print('点击右上角三个点')
        cli3 = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/j1')))
        cli3.click()
        sleep(4)
        print('点击个人头像 "')
        cli4 = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/dnn')))
        cli4.click()
        sleep(3)
        print('点击个人相册进入朋友全')
        cli5 = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/cww')))
        cli5.click()
        sleep(2)

    def crawl(self):
        """
        爬取
        :return:
        """
        # 上滑
        sleep(15)
        print('开始爬..')
        no_list = []
        n = 0
        while True:
            # 当前页面显示的所有数据
        # items = self.wait.until(EC.presence_of_all_elements_located((By.ID, 'com.tencent.mm:id/e2s')))
            items = self.driver.find_elements(By.ID, 'com.tencent.mm:id/kl')
            sleep(3)
        # 遍历每条状态

            for item in items:
                try:
                    # 昵称
                    # nickname = item.find_element_by_id('com.tencent.mm:id/aig').get_attribute('text')
                    imgs = item.find_element_by_id('com.tencent.mm:id/e4y').get_attribute('img')
                    print(imgs)
                    exit()
                    # 正文
                    content = item.find_element_by_id('com.tencent.mm:id/mi').get_attribute('text')
                    p3 = re.findall(r'^禅之路.*', content)
                    print('1')
                    if p3 != []:
                        texts = p3[0]
                        #判断文章不在列表内则写入
                        if texts not in no_list:
                            no_list.append(texts)
                            # print(texts)
                            with open("abc.txt", 'a', encoding='utf-8') as f:
                                f.write(str(texts) +  '\n')
                                print('写入成功', texts)


                except NoSuchElementException:
                    pass
            #下滑700
            self.driver.swipe(FLICK_START_X, FLICK_START_Y + FLICK_DISTANCE, FLICK_START_X, FLICK_START_Y)
            n += 1
            if n == 10 :
                print(len(no_list))

    def main(self):
        # self.login()
        # self.enter()
        self.crawl()

M = Moments()
M.main()

login 和 enter 得内容主要是登陆进入搜索页面 输入搜索内容然后进入朋友圈这些步骤。 这个步骤可以根据模拟器操作助手来进行简化

crawl 就是简单得循环操作一直向下面滑动,然后获取文本对应内容。

加一些sleep 有些网速会比较慢加载跟不上。

流程就是这么个流程  没有用到什么技术,就是进行简简单单的循环下拉然后获取文本。 

你可能感兴趣的:(python)