querylist采集微信公众号文章( 搜狗微信公众号实操训练 )
优采云 发布时间: 2022-01-02 04:12querylist采集微信公众号文章(
搜狗微信公众号实操训练
)
爬取公众号文章
项目介绍
公众号是我最喜欢的学习方式之一。我经常关注一些技巧文章进行实践训练。所以打算做一段时间的公众号爬取文章。
这里我们使用selenium库通过搜狗微信网址获取相关文章内容:
搜狗微信网址
页面详情
我们发现有一个登录按钮可以进入页面。如果我们不登录,我们只能查看10页的内容。如果内容很多,10页是不够的。
这里我设置睡眠时间为20秒,微信扫码登录;然后我会进行后续的操作。
driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒进行微信扫码登录操作
接下来就是输入我们要搜索的相关内容文章
我使用显示等待。如果超过10秒没有找到对应的内容,则表示不存在。
input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,'query')))
input.send_keys("python") #模拟输入
driver.find_element_by_xpath("//input[@class='swz']").click()#模拟点击
最后一步是爬取对应的文章。我们在爬行的时候,需要专门去爬行。这里我选择了官方账号名中收录Python这个词的账号。如果找到,就会被抓取并保存。
#爬取页面所有文章
new_list = driver.find_elements_by_xpath("//li[contains(@id,'sogou_vr_11002601_box')]")
# print(new_list)
for new in new_list:
#获取文章账号
sourse = new.find_elements_by_class_name("account")[0].text
if "python" in sourse:
#获取文章标题
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text
完整代码
<p>from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import datetime
from selenium.common.exceptions import TimeoutException
import xlwt
class official_accounts:
# #实例化参数,直接传入参数
# def __init__(self,name,deep_num):
# self.name = name
# self.deep_num = deep_num
#登录页面
def login_btn(self,name):
global driver
driver = webdriver.Firefox()
driver.get('https://weixin.sogou.com/')
driver.find_element_by_id("loginBtn").click()
time.sleep(20) #休眠20秒进行微信扫码登录操作
input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,'query')))
input.send_keys(name)
driver.find_element_by_xpath("//input[@class='swz']").click()
#爬取内容
def get_news(self,name):
global data_total
data = []
time.sleep(1)
new_list = driver.find_elements_by_xpath("//li[contains(@id,'sogou_vr_11002601_box')]")
# print(new_list)
for new in new_list:
#获取文章账号
sourse = new.find_elements_by_class_name("account")[0].text
if name in sourse:
#获取文章标题
title = new.find_elements_by_xpath("div[2]/h3/a")[0].text
#获取文章发表日期
date = new.find_elements_by_xpath("div[2]/div/span")[0].text
# 文章发表的日期如果较近可能会显示“1天前” “12小时前” “30分钟前”
# 这里可以用`datetime`模块根据时间差求出具体时间
# 然后解析为`YYYY-MM-DD`格式
if '前' in date:
today = datetime.datetime.today()
if '天' in date:
delta = datetime.timedelta(days=int(date[0]))
elif '小时' in date:
delta = datetime.timedelta(hours=int(date.replace('小时前', ' ')))
else:
delta = datetime.timedelta(minutes=int(date.replace('分钟前', ' ')))
date = str((today - delta).strftime('%Y-%m-%d'))
date = datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%Y-%m-%d')
#获取文章简介
content = new.find_elements_by_xpath("div[2]/p")[0].text
#获取链接
url = new.find_elements_by_xpath("div[2]/h3/a")[0].get_attribute('href')
data.append(title)
data.append(date)
data.append(content)
data.append(url)
if data not in data_total:
data_total.append(data)
print(sourse,title,date,content)
print(url)
print('------'*10)
else:
continue
#写入Excel中
def save(self,data_total,name): #将爬取的信息写入Excel文件
# xlwt.Workbook用来创建一个工作表,style_compression=0表示是否被压缩
con = xlwt.Workbook(encoding='utf-8',style_compression=0)
# 添加sheet表格,并允许重复修改
sheet = con.add_sheet("公众号文字爬取信息",cell_overwrite_ok=True)
colunm = ("title","date","content","url") #定义列名
for i in range(0,4):
sheet.write(0,i,colunm[i])
for i in range(0,len(data_total)-1):
d = data_total[i]
for j in range(0,4):
sheet.write(i+1,j,d[j])
con.save( name +".xls")
print("数据保存成功!")
#定义爬取深度,要爬取多少个页面后就停止
def depth(self,name,deep_num):
self.login_btn(name)
global data_total
data_total = []
self.get_news(name)
d = 1 #定义一个爬取深度,爬取多少个页面
while d