欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python采集微信公眾號文章

 更新時間:2018年12月20日 08:35:53   作者:布衣弓長  
這篇文章主要為大家詳細介紹了python采集微信公眾號文章的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python采集微信公眾號文章的具體代碼,供大家參考,具體內(nèi)容如下

在python一個子目錄里存2個文件,分別是:采集公眾號文章.py和config.py。 代碼如下:

1.采集公眾號文章.py

from urllib.parse import urlencode
import pymongo
import requests
from lxml.etree import XMLSyntaxError
from requests.exceptions import ConnectionError
from pyquery import PyQuery as pq
from config import *
 
#配置MongoDB
client = pymongo.MongoClient(MONGO_URI)
db = client[MONGO_DB]
 
base_url = 'http://weixin.sogou.com/weixin?'
#添加頭文件
headers = {
  'Cookie': 'usid=S-pkM6vW_ac4ktr1; SUV=00A75E9078EFD9F75A6573ECAD0EC883; wuid=AAGCxerSHQAAAAqRGn4SoAgAAAA=; IPLOC=CN4414; SUID=767BEAB73220910A000000005AA9E2AA; pgv_pvi=159197184; pgv_si=s8252565504; ABTEST=0|1521083055|v1; weixinIndexVisited=1; sct=1; JSESSIONID=aaalXqKRP6JjS8ac4Hwhw; ppinf=5|1521083238|1522292838|dHJ1c3Q6MToxfGNsaWVudGlkOjQ6MjAxN3x1bmlxbmFtZTo2OiUzQSUyOXxjcnQ6MTA6MTUyMTA4MzIzOHxyZWZuaWNrOjY6JTNBJTI5fHVzZXJpZDo0NDpvOXQybHVOaExNcS1vLW1zbjMxMmNMSkp4OGpZQHdlaXhpbi5zb2h1LmNvbXw; pprdig=tbVf7qLZdDMjpCn4jTf3dg8C8NeRX-YgDi8KUcezn0rteWuhkgU4xMNaxZbakVQuswboIGl_rD-34abU6VY9Jkv7me3BypigyDnIv2lJUchGCo7Gk58m9Qhrm3Aa7NHLHjFVYoaQkQgBSYKpatxMNPe3Tm57ZDlzdPg_8mBmBNQ; sgid=23-30671195-AVqp42ZctqiaCybbDvvfWno4; PHPSESSID=4jjk2a9rv6kq7m50f42r92u3r3; SUIR=D2DF4E12A5A1C3CE1A8AD7F2A5FE18FE; ppmdig=1521087492000000855f9824f94abe82b25d2839135ad3a8; SNUID=FEF36D3F8882EFEC4FCF61E68801DA49; seccodeRight=success; successCount=1|Thu, 15 Mar 2018 04:23:23 GMT',
  'Host': 'weixin.sogou.com',
  'Referer': 'http://weixin.sogou.com/antispider/?from=%2fweixin%3Fquery%3d%E9%A3%8E%E6%99%AF%26type%3d2%26page%3d95%26ie%3dutf8',
  'Upgrade-Insecure-Requests': '1',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'
}
#初始化代理為本地IP
proxy = None
 
#定義獲取代理函數(shù)
def get_proxy():
  try:
    response = requests.get(PROXY_POOL_URL)
    if response.status_code == 200:
      return response.text
    return None
  except ConnectionError:
    return None
 
#添加代理獲取網(wǎng)頁內(nèi)容
def get_html(url, count=1):
  print('Crawling', url)
  print('Trying Count', count)
  global proxy
  if count >= MAX_COUNT:
    print('Tried Too Many Counts')
    return None
  try:
    if proxy:
      proxies = {
        'http': 'http://' + proxy
      }
      response = requests.get(url, allow_redirects=False, headers=headers, proxies=proxies)
    else:
      response = requests.get(url, allow_redirects=False, headers=headers)
    if response.status_code == 200:
      return response.text
    if response.status_code == 302:
      # Need Proxy
      print('302')
      proxy = get_proxy()
      if proxy:
        print('Using Proxy', proxy)
        return get_html(url)
      else:
        print('Get Proxy Failed')
        return None
  except ConnectionError as e:
    print('Error Occurred', e.args)
    proxy = get_proxy()
    count += 1
    return get_html(url, count)
 
 
#獲取索引頁內(nèi)容
def get_index(keyword, page):
  data = {
    'query': keyword,
    'type': 2,
    'page': page
  }
  queries = urlencode(data)
  url = base_url + queries
  html = get_html(url)
  return html
 
#解析索引頁,提取詳情頁網(wǎng)址
def parse_index(html):
  doc = pq(html)
  items = doc('.news-box .news-list li .txt-box h3 a').items()
  for item in items:
    yield item.attr('href')
 
#獲取詳情頁
def get_detail(url):
  try:
    response = requests.get(url)
    if response.status_code == 200:
      return response.text
    return None
  except ConnectionError:
    return None
 
#解析索引頁,返回微信文章標(biāo)題、內(nèi)容、日期、公眾號名稱等
def parse_detail(html):
  try:
    doc = pq(html)
    title = doc('.rich_media_title').text()
    content = doc('.rich_media_content').text()
    date = doc('#post-date').text()
    nickname = doc('#js_profile_qrcode > div > strong').text()
    wechat = doc('#js_profile_qrcode > div > p:nth-child(3) > span').text()
    return {
      'title': title,
      'content': content,
      'date': date,
      'nickname': nickname,
      'wechat': wechat
    }
  except XMLSyntaxError:
    return None
 
#存儲到MongoDB,去重操作
def save_to_mongo(data):
  if db['articles'].update({'title': data['title']}, {'$set': data}, True):
    print('Saved to Mongo', data['title'])
  else:
    print('Saved to Mongo Failed', data['title'])
 
#主函數(shù)
def main():
  for page in range(1, 101):
    html = get_index(KEYWORD, page)
    if html:
      article_urls = parse_index(html)
      for article_url in article_urls:
        article_html = get_detail(article_url)
        if article_html:
          article_data = parse_detail(article_html)
          print(article_data)
 
 
if __name__ == '__main__':
  main()

2.config.py代碼:

#爬取公眾號文章
PROXY_POOL_URL = 'http://127.0.0.1:5000/get'
KEYWORD ='計算機等級二級'   # 輸入關(guān)鍵詞
MONGO_URI = 'localhost' 
MONGO_DB = 'data'
MAX_COUNT = 5

其中,config.py中KEYWORD為查找關(guān)鍵詞,可以根據(jù)需要更改。經(jīng)實測,運行"采集公眾號文章.py"成功!若因受限不成功,可多運行幾次。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 聊聊python里如何用Borg pattern實現(xiàn)的單例模式

    聊聊python里如何用Borg pattern實現(xiàn)的單例模式

    這篇文章主要介紹了聊聊python里如何用Borg pattern實現(xiàn)的單例模式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Python實現(xiàn)數(shù)據(jù)集劃分(訓(xùn)練集和測試集)

    Python實現(xiàn)數(shù)據(jù)集劃分(訓(xùn)練集和測試集)

    這篇文章主要為大家詳細介紹了Python是如何實現(xiàn)數(shù)據(jù)集劃分的,分為訓(xùn)練集和測試集,文中的實現(xiàn)方法講解詳細,感興趣的小伙伴可以了解一下
    2023-05-05
  • Python元組及文件核心對象類型詳解

    Python元組及文件核心對象類型詳解

    本篇文章主要給大家詳細講述了Python核心對象類型之元組及文件的相關(guān)內(nèi)容,對此有興趣的學(xué)習(xí)下。
    2018-02-02
  • python中pandas庫的iloc函數(shù)用法解析

    python中pandas庫的iloc函數(shù)用法解析

    在 Pandas 中,.iloc 是一種用于基于整數(shù)位置進行索引的屬性,可以用于獲取 DataFrame 或 Series 中的數(shù)據(jù),這篇文章主要介紹了python中pandas庫的iloc函數(shù)用法,需要的朋友可以參考下
    2023-05-05
  • 解決python中os.system調(diào)用exe文件的問題

    解決python中os.system調(diào)用exe文件的問題

    這篇文章主要介紹了解決python中os.system調(diào)用exe文件的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python庫pydantic的入門簡易教程

    python庫pydantic的入門簡易教程

    本文主要介紹了python庫pydantic的入門簡易教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python 實現(xiàn)生成均勻分布的點

    python 實現(xiàn)生成均勻分布的點

    今天小編就為大家分享一篇python 實現(xiàn)生成均勻分布的點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python爬蟲定時計劃任務(wù)的幾種常見方法(推薦)

    Python爬蟲定時計劃任務(wù)的幾種常見方法(推薦)

    這篇文章主要介紹了Python爬蟲定時計劃任務(wù)的幾種常見方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 教你使用python實現(xiàn)微信每天給女朋友說晚安

    教你使用python實現(xiàn)微信每天給女朋友說晚安

    非常棒的一個python小實戰(zhàn),文章主要教大家如何用python實現(xiàn)微信每天給女朋友說晚安,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python 計算數(shù)據(jù)偏差和峰度的方法

    python 計算數(shù)據(jù)偏差和峰度的方法

    今天小編就為大家分享一篇python 計算數(shù)據(jù)偏差和峰度的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評論