返回

微信文章封面和标题的获取方法

前端

前提项目

在开始之前,我们需要确保已经安装了以下软件和库:

  • 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

使用方法

我们可以使用以下步骤来获取微信文章的封面和

  1. 首先,我们需要使用代理来绕过微信的反爬虫机制。我们可以使用以下代码来获取代理:
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
  1. 然后,我们需要使用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
  1. 最后,我们可以使用以下代码来下载文章封面图片并将其保存到本地:
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('&nbsp;', ' ')
  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('&amp;', '&')
  text = text.replace('&lt;', '<')
  text = text.replace('&gt;', '>')
  text = text.replace('&quot;', '"