Python爬取今日頭條江歌案新聞
今天學習總結下爬取今日頭條江歌案的新聞,今天頭條用到了Ajax技術,所以用傳統的索取網頁元素的方法是獲取不到內容的,之前我寫了篇爬取拉鉤上海Python職位信息,有興趣的可以點開看看!
第一步
用Chrome打開網頁https://www.toutiao.com/search/?keyword=%E6%B1%9F%E6%AD%8C,打開開發者工具,紅框內的信息是我們需要的,我們要抓取的數據就在data一欄中
我們再觀察下網頁信息,把網頁不斷的忘下翻,可以看到第一頁是offset=0,往下翻過一個節點就是20,40,60這樣遞增上去
好了,基本的分析完了,準備動手寫代碼
# -*- coding:utf-8 -*-import requestsfrom urllib.parse import urlencodefrom requests.exceptions import RequestExceptiondef get_data(): data = { offset: 0, format: json, keyword: 江歌, autoload: true, count: 20, cur_tab: 1, from:search_tab } # urlencode(data)就是鏈接的解析 url = https://www.toutiao.com/search_content/? + urlencode(data) response = requests.get(url) try: if response.status_code == 200: return response.text return None except RequestException: print(data is error) return Nonedef main(): html = get_data() print(html)if __name__ == __main__: main()
運行下代碼,返回了這樣的數據
第二步
解析數據
我們可以看下data一欄下的網頁數據
def parse_data(html): data = json.loads(html) # JSON 字元串解碼為 Python 對象 if data and data in data.keys(): news_list =[] for item in data.get(data): news = { title: item.get(title), # 使用get()方法避免了部分keys不存在時報錯 url: item.get(url), } news_list.append(news) return news_list
解析後再次運行代碼,這就是我們要的數據了
第三步
可以爬下單頁數據了,現在來看下怎麼爬取多頁面
第一步網頁分析的時候,offset的數據是抓取多頁面內容的關鍵,我們先創建一個配置文件config.py,再創建多進程調用map方法
GROUPSTART = 1
GROUPEND = 20
groups = [x * 2 for x in range(GROUP_START, GROUP_END + 1)] pool = Pool(8) pool.map(main, groups) pool.close() pool.join() print(ALl is done!)
最後運行代碼,開啟了多進程後爬取的效率可以說是坐了火箭
完整代碼在GitHub
GitHubTreehl - 簡書歡迎訪問我的博客Treehl的博客
推薦閱讀:
※輪帶逛終極版! 抓取輪子哥(vczh)全部知乎動態
※初識Scrapy,在充滿爬蟲的世界裡做一個好公民
※python爬蟲常用庫之requests詳解
※python爬蟲學習記錄(1)
※回顧一個月的爬蟲學習