python selenium 爬虫爬取指定公众号文章名称、地址

python selenium 爬虫爬取指定某一个公众号文章名称、地址

微信公众号文章目前办公需要很多,找好久都没找到,做出来分享给大家,本文只是给初学者提供一个思路,本文能用就行,拿到就能用的想法,没有精优代码。

需要安装selenium,谷歌浏览器,谷歌浏览器驱动。

直接上干货:
思路:自动登录公众号(需手动扫码),点击新建群发,点击自建图文,点击超级链接,点击选择其他公众号,输入公众号名称搜索,点击选择公众号,获取弹出框HTML,正则解析出标题,地址,日期。

为防止爬的太快限制,我把时间设置间隔得比较长外加随机时间,可以自己设置间隔时间。


from selenium import webdriver
import time
import re
import json
from selenium.webdriver.common.keys import Keys
import random


driver=webdriver.Chrome()#需要一个谷歌驱动chromedriver
driver.implicitly_wait(30)
driver.get('https://mp.weixin.qq.com/')#发起get请求打开微信公众号平台登录页面,然后输入账号密码登录微信公众号

driver.find_element_by_xpath(r'//*[@id="header"]/div[2]/div/div/div[1]/form/div[1]/div[1]/div/span/input').clear() #定位到账号输入框,清除里面的内容
driver.find_element_by_xpath(r'//*[@id="header"]/div[2]/div/div/div[1]/form/div[1]/div[1]/div/span/input').send_keys('1519908766@qq.com')#定位到账号输入框,输入账号1519908766

time.sleep(1)
driver.find_element_by_xpath(r'//*[@id="header"]/div[2]/div/div/div[1]/form/div[1]/div[2]/div/span/input').clear()  #定位到密码输入框,清除里面的内容
driver.find_element_by_xpath(r'//*[@id="header"]/div[2]/div/div/div[1]/form/div[1]/div[2]/div/span/input').send_keys('123456')#定位到密码输入框,输入密码123456

driver.find_element_by_xpath(r'//*[@id="header"]/div[2]/div/div/div[1]/form/div[4]/a').click() #点击登录



time.sleep(15)    #15秒内扫码登录

#登陆成功进入
a='//*[@id="app"]/div[2]/div[3]/div[1]/div[2]/a'
d = driver.find_element_by_xpath(a)
driver.execute_script('arguments[0].click()',d)#点击新建群发
time.sleep(5)
driver.switch_to.window(driver.window_handles[-1])#切换窗口

#点击新建图文
time.sleep(5)
a = r'//*[@id="js_msgSender"]/div/div[2]/div[1]/div/div/div[2]/a'
d = driver.find_element_by_xpath(a)
d.click()
time.sleep(1)
driver.switch_to.window(driver.window_handles[-1])#切换窗口
time.sleep(30)
a = r'//*[@id="js_editor_insertlink"]'#超级链接
d = driver.find_element_by_xpath(a)
# print(d.text)
d.click()
time.sleep(1)
d = driver.find_element_by_xpath(r'//*[@id="vue_app"]/div[5]/div[1]/div/div[2]/div[2]/form[1]/div[3]/div/div/p/button')
# time.sleep(5)
driver.execute_script('arguments[0].click()',d)
d = driver.find_element_by_xpath(r'//*[@id="vue_app"]/div[5]/div[1]/div/div[2]/div[2]/form[1]/div[3]/div/div/div/div/span/input')
# 公众号名称 '长龙修风生物事业部一血脉清片
d.send_keys('长龙修风生物事业部一血脉清片\n')
# time.sleep(3)
d = driver.find_element_by_xpath(r'//*[@id="vue_app"]/div[5]/div[1]/div/div[2]/div[2]/form[1]/div[3]/div/div/div/div[2]/ul/li[1]/div[1]/strong')
d.click()#选择总部公众号
# time.sleep(5)

##查看第一个文章
d = driver.find_element_by_xpath(r'//*[@id="vue_app"]/div[5]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div[2]/div/div/label[1]/div/div[1]')
#鼠标移动到元素上
# ActionChains(driver).move_to_element(d).perform()

def getall():
  for s in range(4):
    s = s+1
    s= str(s)
    #选取整个弹出窗口
    a = r'//*[@id="vue_app"]/div[5]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div[2]/div/div/label[%s]'%s
    d = driver.find_element_by_xpath(a)
    # print(d.text)
    # print('................')
    # 获取弹出窗口html
    t = d.get_attribute('innerHTML')
    # print(t)
    # print('................')
    # 正则选取标题日期网址
    title = re.findall('<div class="inner_link_article_title">(.*)</div> <div class="inner_link_article_date">', t)
    day = re.findall('<div class="inner_link_article_date">(.*)</div></div>', t)
    url = re.findall('<a href="(.*)" target="_blank"', t)
    title = title[0]
    day = day[0]
    url = url[0]
    print('标题:',title)
    print('日期:',day)
    print('网址:',url)


# getall()

# 总页数n
a = r'//*[@id="vue_app"]/div[5]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div[3]/span[1]/span/label[2]'
n = driver.find_element_by_xpath(a)
n = n.text
n = int(n)
#从c页开始
c = 1
for x in range(n):
  x = x+c
  print('当前页数:',x)
  t = random.randint(1,10)
  getall()
  a = r'//*[@id="vue_app"]/div[5]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div[3]/span[2]/input'
  d = driver.find_element_by_xpath(a)
  x=x+1
  d.clear()
  d.send_keys('%s\n'%x)
  time.sleep(10+t)

print('爬取结束,一共爬取页数:',n)
driver.quit()#关闭浏览器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值