querylist采集微信公众号文章( 搜狗微信公众号实操训练 )

优采云 发布时间: 2022-01-02 04:12

  querylist采集微信公众号文章(

搜狗微信公众号实操训练

)

  爬取公众号文章

  项目介绍

  公众号是我最喜欢的学习方式之一。我经常关注一些技巧文章进行实践训练。所以打算做一段时间的公众号爬取文章。

  这里我们使用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(&#39;https://weixin.sogou.com/&#39;)

driver.find_element_by_id("loginBtn").click()

time.sleep(20) #休眠20秒进行微信扫码登录操作

input = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,&#39;query&#39;)))

input.send_keys(name)

driver.find_element_by_xpath("//input[@class=&#39;swz&#39;]").click()

#爬取内容

def get_news(self,name):

global data_total

data = []

time.sleep(1)

new_list = driver.find_elements_by_xpath("//li[contains(@id,&#39;sogou_vr_11002601_box&#39;)]")

# 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 &#39;前&#39; in date:

today = datetime.datetime.today()

if &#39;天&#39; in date:

delta = datetime.timedelta(days=int(date[0]))

elif &#39;小时&#39; in date:

delta = datetime.timedelta(hours=int(date.replace(&#39;小时前&#39;, &#39; &#39;)))

else:

delta = datetime.timedelta(minutes=int(date.replace(&#39;分钟前&#39;, &#39; &#39;)))

date = str((today - delta).strftime(&#39;%Y-%m-%d&#39;))

date = datetime.datetime.strptime(date, &#39;%Y-%m-%d&#39;).strftime(&#39;%Y-%m-%d&#39;)

#获取文章简介

content = new.find_elements_by_xpath("div[2]/p")[0].text

#获取链接

url = new.find_elements_by_xpath("div[2]/h3/a")[0].get_attribute(&#39;href&#39;)

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(&#39;------&#39;*10)

else:

continue

#写入Excel中

def save(self,data_total,name): #将爬取的信息写入Excel文件

# xlwt.Workbook用来创建一个工作表,style_compression=0表示是否被压缩

con = xlwt.Workbook(encoding=&#39;utf-8&#39;,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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线