1. 程式人生 > >代理爬取微信文章

代理爬取微信文章

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 #定義獲取代理函式 def get_proxy(): try: response = requests.get('PROXY_POOL_URL') if response.status_code == 200: return response.text return None except ConnectionError: return None #新增代理獲取網頁內容 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) #獲取索引頁內容 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 #解析索引頁,提取詳情頁網址 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 #解析索引頁,返回微信文章標題、內容、日期、公眾號名稱等 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']) #主函式 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 article_data: save_to_mongo(article_data) if __name__ == '__main__': main()

相關推薦

代理文章

from urllib.parse import urlencode import pymongo import requests from lxml.etree import XMLSyntaxError from requests.exceptions import Co

文章代碼

get amp exce exc ror continue pri 火狐瀏覽器 fire 1 import re 2 import urllib.request 3 import time 4 import urllib.error 5 def use_prox

Python 爬蟲文章

微信爬蟲 爬取微信文章 爬取公眾號文章搜狗微信平臺為入口 地址:http://weixin.sogou.com/ --------------------------------------------------------------搜索關鍵詞“科技”對比網址變化情況查看網址http://wei

Python資料爬蟲學習筆記(13)文章資料

一、需求:在微信搜尋網站中,通過設定搜尋關鍵詞以及搜尋頁面數,爬取出所有符合條件的微信文章: 二、搜尋頁URL分析階段: 1、在搜尋框中輸入任意關鍵詞,在出現的搜尋結果頁面點選下一頁,將每一頁的URL複製下來進行觀察: 2、注意到頁碼由page=X決定,搜尋關鍵

Python爬蟲:文章

import requests from urllib.parse import urlencode from requests.exceptions import ConnectionError from pyquery import PyQuery as

Python爬蟲(5) 借助搜狗搜索文章

public 文章內容 bsp get python爬蟲 header 正則表達式 exce 3.0 借助搜狗搜索爬取微信文章 from urllib import request as r import re as e from urllib

python實戰筆記之(6):使用代理處理反文章

搜狗(http://weixin.sogou.com/)已經為我們做了一層微信文章的爬取,通過它我們可以獲取一些微信文章的列表以及微信公眾號的一些資訊,但是它有很多反爬蟲的措施,可以檢測到你的IP異常,然後把你封掉。本文采用代理的方法處理反爬來抓取微信文章。 (1)目標站點

使用redis所維護的代理池抓文章

sge article pri data item referer count ttr fail 搜狗搜索可以直接搜索微信文章,本次就是利用搜狗搜搜出微信文章,獲得詳細的文章url來得到文章的信息.並把我們感興趣的內容存入到mongodb中。 因為搜狗搜索微信文章的反爬蟲比

python 多線程方法公眾號文章

微信爬蟲 多線程爬蟲 本文在上一篇基礎上增加多線程處理(http://blog.51cto.com/superleedo/2124494 )執行思路:1,規劃好執行流程,建立兩個執行線程,一個控制線程2,線程1用於獲取url,並寫入urlqueue隊列3,線程2,通過線程1的url獲取文章內容,並保

PK10平臺開發與用python公眾號文章

網址 谷歌瀏覽器 pytho google http 開發 微信 安裝python rom 本文通過微信提供微信PK10平臺開發[q-21528-76294] 網址diguaym.com 的公眾號文章調用接口,實現爬取公眾號文章的功能。註意事項 1.需要安裝python s

Python公眾號歷史文章進行資料分析

思路: 1. 安裝代理AnProxy,在手機端安裝CA證書,啟動代理,設定手機代理; 2. 獲取目標微信公眾號的__biz; 3. 進入微信公眾號的歷史頁面; 4. 使用Monkeyrunner控制滑屏;獲取更多的歷史訊息; 5. 記錄文章標題,摘要,建立時間,創作型別,地

文章:使用代理來處理反爬蟲措施

參考:崔慶才老師教程 目標網站分析 我們將從搜狗-微信這個網址來爬取微信的文章。 https://weixin.sogou.com/ 輸入“程式設計師”並搜尋: 可以看到上方的URL有許多的資訊,我們只保留query、type、page這幾個引數即可。修改p

【Python爬蟲】公眾號文章資訊準備工作

有一天發現我關注了好多微信公眾號,那時就想有沒有什麼辦法能夠將微信公眾號的文章弄下來,而且還想將一些文章的精彩評論一起搞下來。參考了一些文章,通過幾天的研究基本上實現了自己的要求,現在記錄一下自己的一些心得。 整個研究過程如下: 1.瞭解微信公眾號文章連結的組成,歷史文章API組成,單個文章

用python公眾號文章

本文通過微信提供的公眾號文章呼叫介面,實現爬取公眾號文章的功能。 # -*- coding: utf-8 -*- from selenium import webdriver import time import json import reques

記一次企業級爬蟲系統升級改造(四):公眾號文章(通過搜狗與新榜等第三方平臺)

首先表示抱歉,年底大家都懂的,又涉及SupportYun系統V1.0上線。故而第四篇文章來的有點晚了些~~~對關注的朋友說聲sorry! SupportYun系統當前一覽:   首先說一下,文章的進度一直是延後於系統開發進度的。   當前系統V1.0 已經正式上線服役了,這

輿情監控系統——step1.公眾號文章

小明醬於2018年元旦更新,寫的還是很糙,如果你在爬蟲問題中遇到問題,歡迎交流哦,評論區隨時為你開放! 實習兩週過去了,目前任務量還不是很大。我的老闆很nice,是個軍校生,給我安排的任務也比我預想的要貼近我的研究方向,做的是微信公眾號文章的輿情監控系統,以下

java獲取公總號推送的所有資訊的url,用於推送的文章內容

場景描述:    在使用者提出需要爬取微信公總號推送訊息的時候,感覺是懵逼的,之前從來沒爬取過,無從下手,沒辦法顧客是上帝,既然使用者提出了需求,我們只能想法去解決問題。    然後根據使用者提供微信公總號  安泰科現貨報價 去爬取,發現公總號推送的訊息的url並不是固定不變

pythom公眾號最新部分文章(可執行程式碼)

執行下面的程式碼需要安裝以下內容: pip install pyquery pip install requests pip install selenium pip install pyExcelerator pip install

[Python爬蟲] 之十五:Selenium +phantomjs根據公眾號抓文章

頭部 drive lac 過程 標題 操作 函數 軟件測試 init   借助搜索微信搜索引擎進行抓取   抓取過程   1、首先在搜狗的微信搜索頁面測試一下,這樣能夠讓我們的思路更加清晰        在搜索引擎上使用微信公眾號英文名進行“搜公眾號&r

23個Python爬蟲開源項目代碼:、淘寶、豆瓣、知乎、博等

公眾 mon 成交 個人 標簽 req 不同 數據存儲 百度雲盤 來源:全球人工智能 作者:SFLYQ 今天為大家整理了23個Python爬蟲項目。整理的原因是,爬蟲入門簡單快速,也非常適合新入門的小夥伴培養信心。所有鏈接指向GitHub,祝大家玩的