吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4691|回复: 19
收起左侧

[Python 转载] 【python入门爬虫】爬取公众号搜索结果导出为Excel

  [复制链接]
a13381041 发表于 2020-8-27 15:45
前言:昨天在吾爱看到一个悬赏《求写一个微信公众号爬虫》,要求根据关键字搜索全网公众号,并导出为excell表格。
趁着上班划水的时间,我就写了一个爬虫。
爬取公众号的思路:
一、首先是要先登录公众号,可以用selenuim,模拟浏览器登录微信公众号,然后将cookies(登录状态)保存下来,还有就是微信的查询公众号的接口是需要token的,token的获取可以从登录后的跳转链接去截取
二、通过request+cookies,模拟查询的请求参数,发送get请求,获取报文,微信公众号的查询是分页查询,所以要多次调用,每次从第begin条记录开始查,每次查count个,当返回结果小于count的时候,就结束调用,begin初始化为0,count默认为5,然后query参数是关键字,其他参数默认
三、新建一个excel表,将返回的结果进行处理,获取每条记录的id,name等参数,做成一个行,写入到excel中,最后保存
(你们也可以根据这个思路,去获取某个公众号的往期推文,或者爬取其他信息)
效果图片:
1598514203(1).jpg
以下是代码
[Python] 纯文本查看 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
import requests
from openpyxl import Workbook


def savecookies(cookies):
    with open("./cookies.json", "w") as fp:
        json.dump(cookies, fp)


def setcookies(driver):
    with open("./cookies.json", "r") as fp:
        cookies = json.load(fp)
        for cookie in cookies:
            # for k,v in cookie.items():
            #     item = {'name':k,"value":v}
            driver.add_cookie(cookie_dict=cookie)

    return driver

def login(driver):
    loginURL="https://mp.weixin.qq.com/";

    driver.get(loginURL)
    print("打开页面中...")
    time.sleep(2)
    #重新获取当前的url,当url不等于loginURL证明已经登录
    if(str(driver.current_url).find("token=")>0):
        print("已经登录")
    else:
        time.sleep(2)
        #监听用户是否扫码登录,登录跳出循环
        while driver.current_url == loginURL:
            time.sleep( 0.5 )

        print("----登录成功");
        #保存cookies
        savecookies(driver.get_cookies())

    #获取token
    driver.get("https://mp.weixin.qq.com");
    nowURL = driver.current_url
    start = str(nowURL).find("token=")+6
    token = str(nowURL)[start:]
    return token


def search(word,token,begin,count):
    headers = {
        "HOST": "mp.weixin.qq.com",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
    }

    #request设置cookies
    cookies_dict = dict()
    with open("./cookies.json", "r") as fp:
        cookies = json.load(fp)
        for cookie in cookies:
            if cookie['name'] == 'pgv_si':
                continue
            if cookie['name'] == 'uuid':
                continue
            cookies_dict[cookie['name']] = cookie['value']
        cookiesJar = requests.utils.cookiejar_from_dict(cookies_dict, cookiejar=None,overwrite=True)
        session = requests.session()
        session.cookies=cookiesJar
        session.headers =headers
        #模拟get请求
        res = session.get("https://mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&begin="+str(begin)+"&count="+str(count)+"&query="+word+"&token="+str(token)+"&lang=zh_CN&f=json&ajax=1")

        print(res.text)
        return  json.loads(res.text)

def save(datas):
    #解析报文
    resultList = datas['list']
    for item in resultList:
        #组成一行
        row = [item['fakeid'],item['nickname'],item['round_head_img'],item['alias'],item['service_type']]
        #写入
        sheet.append(row)

if __name__ == '__main__':
    #新建一个excel
    book = Workbook()
    sheet= book._sheets[0]

    option = Options()
    # 以下为不显示浏览器界面进行运行的设置
    # option.add_argument('--headless')
    # option.add_argument('--disable-gpu')
    # option.add_argument("window-size=1024,768")
    # option.add_argument("--no-sandbox")
    option.add_argument(r"user-data-dir=D:\WeChat")#将浏览器的数据进行保存,第二次浏览可以不用在登录
    #加载设置和驱动
    driver = webdriver.Chrome(options= option,executable_path="./chromedriver.exe")
    #登录并获取token
    token = login(driver)

    #编写标题行
    row = ['fakeid','nickname','round_head_img','alias','service_type']
    #写入
    sheet.append(row)

    #开始爬取搜索公众号的结果
    begin = 0
    while True:
        #模拟get请求
        res = search("笔吧",token,begin,5)
        #写入到excel
        save(res)
        #翻页
        begin+=5
        #当最后一页时,返回的数据个数小于count跳出循环
        if len(res['list'])<5:
            break
    #保存
    book.save("./WeChat.xlsx")
    driver.quit()


完整的代码:
https://www.lanzoux.com/i6Un9g3vcgd密码:i2tu

免费评分

参与人数 4吾爱币 +10 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
kxs2018 + 1 + 1 谢谢@Thanks!
wybaxin + 1 + 1 用心讨论,共获提升
xinyangtuina + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ablajan 发表于 2021-5-25 13:34
[HTML] 纯文本查看 复制代码
Traceback (most recent call last):
  File "D:/python/lizi/微信公众号爬取/WeChat.py", line 104, in <module>
    driver = webdriver.Chrome(options= option,executable_path="./chromedriver.exe")
  File "C:\Users\Administrator.SC-202103111759\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "C:\Users\Administrator.SC-202103111759\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Users\Administrator.SC-202103111759\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Users\Administrator.SC-202103111759\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Administrator.SC-202103111759\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary


Process finished with exit code 1


求解??????????大佬
 楼主| a13381041 发表于 2021-5-31 10:09
ablajan 发表于 2021-5-25 13:34
[mw_shl_code=html,true]Traceback (most recent call last):
  File "D:/python/lizi/微信公众号爬取/WeC ...

没有chromedriver驱动
去http://npm.taobao.org/mirrors/chromedriver/找下对于自己浏览器版本的chromedriver驱动,然后放在代码的目录里面就行了
dxmcf 发表于 2020-8-27 16:07
lnbxldn 发表于 2020-8-27 16:08
认真学习呀
Zeaf 发表于 2020-8-27 16:13
程序员上班竟然有划水的时间么?
zhengyuqi 发表于 2020-8-27 16:38
求教学爬虫怎么入门
xbang 发表于 2020-8-27 16:48
zhengyuqi 发表于 2020-8-27 16:38
求教学爬虫怎么入门

论坛入门的教程,多的是啊。按照流程学一遍就入门了
UPC 发表于 2020-8-27 16:48
学习一下,啪啪啪
JILEJIVE2020 发表于 2020-8-27 17:00
学习了,谢谢楼主分享
 楼主| a13381041 发表于 2020-8-27 17:04
zhengyuqi 发表于 2020-8-27 16:38
求教学爬虫怎么入门

先学语言的语法,再了解一下网络原理,然后不断打码
初学者推荐看看视频
绫音 发表于 2020-8-27 17:34
谢楼主分享 学习下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表