鱼C论坛

 找回密码
 立即注册
查看: 2045|回复: 17

[已解决]求各位大神帮忙设计爬虫程序

[复制链接]
发表于 2021-2-7 11:11:32 | 显示全部楼层 |阅读模式
50鱼币
想把自己刚兴趣的微信公众号文章保存下来,故求各位大神帮忙设计一个爬取微信公众号文章的程序,可以保存为PDF、WOrd形式的,谢谢~
最佳答案
2021-2-7 11:11:33
lonlyxiaomo 发表于 2021-2-7 14:58
只需要文章就可以 图片 视频之类的不需要

import requests
from bs4 import BeautifulSoup

def open_url(url):
    head = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
    html = requests.get(url,headers = head).text
    
    soup = BeautifulSoup(html,"html.parser")
    title = soup.find(id = "activity-name")
    print(title.text)
    data = soup.find_all("section")
    text = []
    for i in data:
        if i.text not in text:
            text.append(i.text)
    for i in text:
        print("    " + i ,end = "\n\n")

if __name__ == "__main__":
    url = "https://mp.weixin.qq.com/s/mBgzrvvODAVn2jFgQjC8-A"
    open_url(url)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 11:11:33 | 显示全部楼层    本楼为最佳答案   
lonlyxiaomo 发表于 2021-2-7 14:58
只需要文章就可以 图片 视频之类的不需要

import requests
from bs4 import BeautifulSoup

def open_url(url):
    head = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
    html = requests.get(url,headers = head).text
    
    soup = BeautifulSoup(html,"html.parser")
    title = soup.find(id = "activity-name")
    print(title.text)
    data = soup.find_all("section")
    text = []
    for i in data:
        if i.text not in text:
            text.append(i.text)
    for i in text:
        print("    " + i ,end = "\n\n")

if __name__ == "__main__":
    url = "https://mp.weixin.qq.com/s/mBgzrvvODAVn2jFgQjC8-A"
    open_url(url)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 14:51:59 From FishC Mobile | 显示全部楼层
举例比如
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 14:57:08 | 显示全部楼层

微信公众号  远方青木  ETF拯救世界  的所有文章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 14:57:08 | 显示全部楼层
公众号又是图片又是文字又是视频的,不好搞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 14:58:11 | 显示全部楼层
qq1151985918 发表于 2021-2-7 14:57
公众号又是图片又是文字又是视频的,不好搞

只需要文章就可以 图片 视频之类的不需要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 15:05:30 | 显示全部楼层
我可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 15:09:53 | 显示全部楼层

可以帮忙设计下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 15:11:04 | 显示全部楼层
import requests
from lxml import etree
import re
import os


def get_con(url):
    #url="https://mp.weixin.qq.com/s/mdQYljBEEELZTaVlGwdZ9A"
    html=requests.get(url).text
    #print(html)
    con=etree.HTML(html)
    #print(con)
    #获取标题
    h2=con.xpath('//h2[@class="rich_media_title"]/text()')
    h2=h2[0]
    h2=re.sub(r'[\t\n\|\/\<\>\:\*\?\\\" ]','',h2) #去除多余的字符
    h2 = re.sub('......', '', h2)  # 去除多余的字符
    print(h2)

    os.makedirs(f'./weixin/{h2}/',exist_ok=True)

    #获取作者
    span1=con.xpath('//span[@class="rich_media_meta rich_media_meta_text"]/text()')
    try:
        span1=span1[0]
        span1 = re.sub(r'[\t\n ]', '', span1)  # 去除多余的字符
    except:
        span1=''
    print(span1)
    span2=con.xpath('//span[@class="rich_media_meta rich_media_meta_nickname"]/a/text()')
    span2=span2[0]
    span2=re.sub(r'[\t\n ]','',span2) #去除多余的字符
    print(span2)
    if span1=='':
        author=span2
    else:
        author='%s%s%s'%(span2,"-",span1)
    print(author)
    #获取源码
    p_con=''
    div=con.xpath('//section/p')
    print(len(div))
    for p in div:
        p = etree.tostring(p, encoding='utf-8')
        p = bytes.decode(p)
        p_con = p_con + p
    print(p_con)
    #获取正文
    p_text=''
    span=con.xpath('//section/p')
    print(span)
    for p_tex in span:
        p_tex=p_tex.xpath('string(.)')
        p_text=p_text+p_tex+'\n'
        #print(p_tex)
    print(p_text)

    #保存内容
    con_text='%s%s%s%s%s%s%s'%(h2,'\n',author,'\n',p_text,'\n',p_con)
    with open(f'./weixin/{h2}/{h2}.txt', 'w',encoding='utf-8') as f:
        f.write(con_text)
    print(f'保存 {h2} 内容成功!')

    #获取图片
    p_imgs=con.xpath('//section/p/img')
    i=0
    for p_img in p_imgs:
        #print(p_img.attrib)
        img_url=p_img.attrib['data-src']
        print(img_url)
        if "jpg" in img_url:
            img_name=f'{i}.jpg'
        if "png" in img_url:
            img_name = f'{i}.png'
        if "gif" in img_url:
            img_name = f'{i}.gif'
        print(img_name)
        r=requests.get(img_url)
        with open(f'./weixin/{h2}/{img_name}', 'wb') as f:
            f.write(r.content)
        print(f'保存 {img_name} 图片成功!')
        i=i+1
    print(f'保存 {h2} 所有图片成功!')



if __name__ == '__main__':
    url=input("请输入要采集的微信公众号文章地址:")
    #url="https://mp.weixin.qq.com/s/mdQYljBEEELZTaVlGwdZ9A"
    get_con(url)


这是在网上找的一个代码  其中网址换成文章的地址了 貌似不得行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 15:12:08 | 显示全部楼层
本帖最后由 lonlyxiaomo 于 2021-2-7 15:14 编辑

好久没来 忘记怎么粘代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 15:22:24 | 显示全部楼层

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/文章/文章收集.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'



报错了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 15:29:25 | 显示全部楼层
lonlyxiaomo 发表于 2021-2-7 15:22
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/文章/文章收集.py", line ...

你得有模块啊  复制下面的代码
pip install requests
在 cmd 命令界面 右键粘贴 回车
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 15:35:47 | 显示全部楼层
qq1151985918 发表于 2021-2-7 15:29
你得有模块啊  复制下面的代码 在 cmd 命令界面 右键粘贴 回车

使用了 还是报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 15:42:12 | 显示全部楼层
qq1151985918 发表于 2021-2-7 15:29
你得有模块啊  复制下面的代码 在 cmd 命令界面 右键粘贴 回车

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/文章/文章收集.py", line 2, in <module>
    from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 15:53:05 | 显示全部楼层
lonlyxiaomo 发表于 2021-2-7 15:42
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/文章/文章收集.py", line ...

继续啊,你缺模块
pip install bs4
按照上边的继续
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 16:00:03 | 显示全部楼层
qq1151985918 发表于 2021-2-7 15:53
继续啊,你缺模块 按照上边的继续

谢谢大佬  成功抓取了  不过只能一个网址一个的抓取 可不可以把一个公众号的文章全部抓取了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 16:33:27 | 显示全部楼层
lonlyxiaomo 发表于 2021-2-7 16:00
谢谢大佬  成功抓取了  不过只能一个网址一个的抓取 可不可以把一个公众号的文章全部抓取了呢

理论上当然是可以的,实际上我能力不够,绕不开微信的验证,我听说他们用网页微信的还是搜狗微信的好像可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-7 16:58:52 | 显示全部楼层
我也看了 没看懂

不过还是谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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