1. 程式人生 > >Python 爬蟲 ajax爬取馬雲爸爸微博內容

Python 爬蟲 ajax爬取馬雲爸爸微博內容

item ber ODB ont 分享 cache cti book 生成

ajax爬取情況

有時候我們在用 Requests 抓取頁面的時候,得到的結果可能和在瀏覽器中看到的是不一樣的,在瀏覽器中可以看到正常顯示的頁面數據,但是使用 Requests 得到的結果並沒有,這其中的原因是 Requests 獲取的都是原始的 HTML 文檔,而瀏覽器中的頁面則是頁面又經過 JavaScript 處理數據後生成的結果,這些數據的來源有多種,可能是通過 Ajax 加載的,可能是包含在了 HTML 文檔中的,也可能是經過 JavaScript 經過特定算法計算後生成的

項目代碼如下

 1 import requests
 2 from fake_useragent import
UserAgent 3 from pyquery import PyQuery 4 from urllib.parse import urlencode 5 from requests.packages import urllib3 6 from pymongo import MongoClient 7 8 # 關閉警告 9 urllib3.disable_warnings() 10 11 base_url = https://m.weibo.cn/api/container/getIndex? 12 13 # 激活本地MongoDB客戶端 14 client = MongoClient(
localhost,27001) 15 # 創建數據庫 16 pages = client[pages] 17 # 創建集合 18 ma_yun = pages[ma_yun] 19 20 # 保存到mongoDB中 21 def save_to_mongo(result): 22 if ma_yun.insert_one(result): 23 print(saved to Mongo,已獲取{number}條數據.format(number=ma_yun.count())) 24 25 # 生成UA 26 def create_user_agent():
27 ua = UserAgent(use_cache_server=False) 28 # print(ua.chrome) 29 return ua.chrome 30 31 # 生成headers 32 def create_headers(): 33 headers = { 34 User-Agent: create_user_agent() 35 } 36 return headers 37 38 # 獲取頁面 39 def get_page(page): 40 # 設置參數 41 params = { 42 sudaref:germey.gitbooks.io, 43 display:0, 44 retcode:6102, 45 type:uid, 46 value:2145291155, 47 containerid:1076032145291155, 48 page:page 49 } 50 url = base_url + urlencode(params) 51 try: 52 response = requests.get(url,create_headers(),verify=False) 53 if response.status_code == 200: 54 return response.json() 55 except requests.ConnectionError as e: 56 print(Error,e.args) 57 58 # 解析頁面 59 def parse_page(json): 60 if json: 61 items = json.get(data).get(cards) 62 if items != None: 63 for item in items: 64 item = item.get(mblog) 65 weibo = {} 66 weibo[id] = item.get(id) 67 # 將正文中的 HTML 標簽去除掉 68 weibo[text] = PyQuery(item.get(text)).text() 69 # 點贊數 70 weibo[attitudes_count] = item.get(attitudes_count) 71 # 評論數 72 weibo[comments_count] = item.get(comments_count) 73 # 發布時間 74 weibo[datetime] = item.get(created_at) 75 # 轉發數 76 weibo[reposts_count] = item.get(reposts_count) 77 78 yield weibo 79 80 # 設置主方法進行調用其他方法 81 def main(): 82 for page in range(1,30): 83 json = get_page(page) 84 results = parse_page(json) 85 for result in results: 86 save_to_mongo(result) 87 88 if __name__ == __main__: 89 main()

項目運行情況

技術分享圖片

技術分享圖片

Python 爬蟲 ajax爬取馬雲爸爸微博內容