求各位大神帮忙设计爬虫程序
想把自己刚兴趣的微信公众号文章保存下来,故求各位大神帮忙设计一个爬取微信公众号文章的程序,可以保存为PDF、WOrd形式的,谢谢~ 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
举例比如
微信公众号远方青木ETF拯救世界的所有文章 公众号又是图片又是文字又是视频的,不好搞 qq1151985918 发表于 2021-2-7 14:57
公众号又是图片又是文字又是视频的,不好搞
只需要文章就可以 图片 视频之类的不需要 我可以 aguinzoo 发表于 2021-2-7 15:05
我可以
可以帮忙设计下吗 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:14 编辑
好久没来 忘记怎么粘代码了{:5_104:} 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'
报错了呢 lonlyxiaomo 发表于 2021-2-7 15:22
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/文章/文章收集.py", line ...
你得有模块啊复制下面的代码 pip install requests在 cmd 命令界面 右键粘贴 回车 qq1151985918 发表于 2021-2-7 15:29
你得有模块啊复制下面的代码 在 cmd 命令界面 右键粘贴 回车
使用了 还是报错{:5_100:} 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'
lonlyxiaomo 发表于 2021-2-7 15:42
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/文章/文章收集.py", line ...
继续啊,你缺模块 pip install bs4按照上边的继续 qq1151985918 发表于 2021-2-7 15:53
继续啊,你缺模块 按照上边的继续
谢谢大佬成功抓取了不过只能一个网址一个的抓取 可不可以把一个公众号的文章全部抓取了呢 lonlyxiaomo 发表于 2021-2-7 16:00
谢谢大佬成功抓取了不过只能一个网址一个的抓取 可不可以把一个公众号的文章全部抓取了呢
理论上当然是可以的,实际上我能力不够,绕不开微信的验证,我听说他们用网页微信的还是搜狗微信的好像可以 我也看了 没看懂
不过还是谢谢大佬
页:
[1]