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

ajax爬取狀況

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

項目代碼以下

 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()

項目運行狀況

相關文章
相關標籤/搜索