返回
微信文章封面和标题的获取方法
前端
2024-01-25 21:12:17
前提项目
在开始之前,我们需要确保已经安装了以下软件和库:
- Python 3
- requests
- Beautifulsoup
- lxml
你可以在终端中使用以下命令来安装这些库:
pip install requests
pip install beautifulsoup4
pip install lxml
原作者git数据结构
原作者的git数据结构如下:
├── README.md
├── requirements.txt
├── setup.py
├── src
│ ├── crawler.py
│ ├── main.py
│ ├── utils.py
├── tests
│ ├── test_crawler.py
│ ├── test_main.py
│ ├── test_utils.py
└── venv
使用方法
我们可以使用以下步骤来获取微信文章的封面和
- 首先,我们需要使用代理来绕过微信的反爬虫机制。我们可以使用以下代码来获取代理:
import requests
def get_proxy():
"""
获取代理
"""
url = 'http://127.0.0.1:5010/get'
response = requests.get(url)
if response.status_code == 200:
return response.json()
else:
return None
- 然后,我们需要使用BeautifulSoup和lxml来解析微信文章的HTML代码。我们可以使用以下代码来获取文章的封面和
import requests
from bs4 import BeautifulSoup
from lxml import etree
def get_article_info(url, proxy):
"""
获取文章信息
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36'
}
response = requests.get(url, headers=headers, proxies=proxy)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
title = soup.find('title').text
cover = soup.find('meta', property='og:image').get('content')
return title, cover
else:
return None, None
- 最后,我们可以使用以下代码来下载文章封面图片并将其保存到本地:
import requests
def download_image(url, path):
"""
下载图片
"""
response = requests.get(url)
if response.status_code == 200:
with open(path, 'wb') as f:
f.write(response.content)
else:
return None
主要代码
以下是如何获取微信文章封面和标题的主要代码:
import requests
from bs4 import BeautifulSoup
from lxml import etree
def get_article_info(url, proxy):
"""
获取文章信息
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36'
}
response = requests.get(url, headers=headers, proxies=proxy)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
title = soup.find('title').text
cover = soup.find('meta', property='og:image').get('content')
return title, cover
else:
return None, None
def download_image(url, path):
"""
下载图片
"""
response = requests.get(url)
if response.status_code == 200:
with open(path, 'wb') as f:
f.write(response.content)
else:
return None
def main():
"""
主函数
"""
url = 'https://mp.weixin.qq.com/s/123456789'
proxy = get_proxy()
title, cover = get_article_info(url, proxy)
print(title)
print(cover)
download_image(cover, 'cover.jpg')
if __name__ == '__main__':
main()
代理
我们可以使用代理来绕过微信的反爬虫机制。代理可以帮助我们隐藏我们的真实IP地址,从而使我们能够访问微信文章。我们可以使用以下代码来获取代理:
import requests
def get_proxy():
"""
获取代理
"""
url = 'http://127.0.0.1:5010/get'
response = requests.get(url)
if response.status_code == 200:
return response.json()
else:
return None
初始化
proxy = get_proxy()
curl
我们可以使用curl来获取微信文章的HTML代码。我们可以使用以下代码来获取文章的HTML代码:
import subprocess
def get_html(url, proxy):
"""
获取HTML代码
"""
cmd = 'curl -x {} "{}"'.format(proxy, url)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()
if process.returncode == 0:
return output.decode('utf-8')
else:
return None
信息爬取
我们可以使用BeautifulSoup和lxml来解析微信文章的HTML代码。我们可以使用以下代码来获取文章的封面和
from bs4 import BeautifulSoup
from lxml import etree
def get_article_info(html):
"""
获取文章信息
"""
soup = BeautifulSoup(html, 'lxml')
title = soup.find('title').text
cover = soup.find('meta', property='og:image').get('content')
return title, cover
内容处理
我们可以使用以下代码来处理微信文章的内容:
def process_content(content):
"""
处理内容
"""
content = content.replace('</p>', '\n')
content = content.replace('<br>', '\n')
content = content.replace(' ', ' ')
return content
微信文章源码
我们可以使用以下代码来提取微信文章的主体:
def extract_article_body(html):
"""
提取文章主体
"""
soup = BeautifulSoup(html, 'lxml')
body = soup.find('div', class_='rich_media_content')
return body.text
图片链接获取
我们可以使用以下代码来获取文章中图片的链接:
def get_image_urls(html):
"""
获取图片链接
"""
soup = BeautifulSoup(html, 'lxml')
image_urls = []
for img in soup.find_all('img'):
image_urls.append(img.get('src'))
return image_urls
文章的基本信息
我们可以使用以下代码来获取文章的基本信息:
def get_article_info(html):
"""
获取文章基本信息
"""
soup = BeautifulSoup(html, 'lxml')
title = soup.find('title').text
author = soup.find('meta', property='article:author').get('content')
publish_time = soup.find('meta', property='article:published_time').get('content')
return title, author, publish_time
特殊字符转换
我们可以使用以下代码来转换特殊字符:
def convert_special_chars(text):
"""
转换特殊字符
"""
text = text.replace('&', '&')
text = text.replace('<', '<')
text = text.replace('>', '>')
text = text.replace('"', '"