lonlyxiaomo 发表于 2021-2-7 11:11:32

求各位大神帮忙设计爬虫程序

想把自己刚兴趣的微信公众号文章保存下来,故求各位大神帮忙设计一个爬取微信公众号文章的程序,可以保存为PDF、WOrd形式的,谢谢~

qq1151985918 发表于 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)

wp231957 发表于 2021-2-7 14:51:59

举例比如

lonlyxiaomo 发表于 2021-2-7 14:57:08

wp231957 发表于 2021-2-7 14:51
举例比如

微信公众号远方青木ETF拯救世界的所有文章

qq1151985918 发表于 2021-2-7 14:57:08

公众号又是图片又是文字又是视频的,不好搞

lonlyxiaomo 发表于 2021-2-7 14:58:11

qq1151985918 发表于 2021-2-7 14:57
公众号又是图片又是文字又是视频的,不好搞

只需要文章就可以 图片 视频之类的不需要

aguinzoo 发表于 2021-2-7 15:05:30

我可以

lonlyxiaomo 发表于 2021-2-7 15:09:53

aguinzoo 发表于 2021-2-7 15:05
我可以

可以帮忙设计下吗

lonlyxiaomo 发表于 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
    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
      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
    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)


这是在网上找的一个代码其中网址换成文章的地址了 貌似不得行

lonlyxiaomo 发表于 2021-2-7 15:12:08

本帖最后由 lonlyxiaomo 于 2021-2-7 15:14 编辑

好久没来 忘记怎么粘代码了{:5_104:}

lonlyxiaomo 发表于 2021-2-7 15:22:24

qq1151985918 发表于 2021-2-7 15:13


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



报错了呢

qq1151985918 发表于 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 命令界面 右键粘贴 回车

lonlyxiaomo 发表于 2021-2-7 15:35:47

qq1151985918 发表于 2021-2-7 15:29
你得有模块啊复制下面的代码 在 cmd 命令界面 右键粘贴 回车

使用了 还是报错{:5_100:}

lonlyxiaomo 发表于 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'

qq1151985918 发表于 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按照上边的继续

lonlyxiaomo 发表于 2021-2-7 16:00:03

qq1151985918 发表于 2021-2-7 15:53
继续啊,你缺模块 按照上边的继续

谢谢大佬成功抓取了不过只能一个网址一个的抓取 可不可以把一个公众号的文章全部抓取了呢

qq1151985918 发表于 2021-2-7 16:33:27

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

理论上当然是可以的,实际上我能力不够,绕不开微信的验证,我听说他们用网页微信的还是搜狗微信的好像可以

lonlyxiaomo 发表于 2021-2-7 16:58:52

我也看了 没看懂

不过还是谢谢大佬
页: [1]
查看完整版本: 求各位大神帮忙设计爬虫程序