日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分页请求json数据_pyspider抓取虎嗅网文章数据

發(fā)布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分页请求json数据_pyspider抓取虎嗅网文章数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 虎嗅網文章數據----寫在前面

今天繼續(xù)使用pyspider爬取數據,很不幸,虎嗅資訊網被我選中了,網址為 https://www.huxiu.com/ 爬的就是它的資訊頻道,本文章僅供學習交流使用,切勿用作其他用途。

常規(guī)操作,分析待爬取的頁面

拖拽頁面到最底部,會發(fā)現一個加載更多按鈕,點擊之后,抓取一下請求,得到如下地址

2. 虎嗅網文章數據----分析請求

查閱該請求的方式和地址,包括參數,如下圖所示

得到以下信息

  • 頁面請求地址為:https://www.huxiu.com/v2_action/article_list
  • 請求方式:POST
  • 請求參數比較重要的是一個叫做page的參數
  • 我們只需要按照上面的內容,把pyspider代碼部分編寫完畢即可。 on_start 函數內部編寫循環(huán)事件,注意到有個數字2025這個數字,是我從剛才那個請求中看到的總頁數。你看到這篇文章的時候,這個數字應該變的更大了。

    @every(minutes=24 * 60)def on_start(self):for page in range(1,2025):print("正在爬取第 {} 頁".format(page))self.crawl('https://www.huxiu.com/v2_action/article_list', method="POST",data={"page":page},callback=self.parse_page,validate_cert=False)

    頁面生成完畢之后,開始調用parse_page 函數,用來解析 crawl() 方法爬取 URL 成功后返回的 Response 響應。

    @config(age=10 * 24 * 60 * 60)def parse_page(self, response):content = response.json["data"]doc = pq(content)lis = doc('.mod-art').items()data = [{'title': item('.msubstr-row2').text(),'url':'https://www.huxiu.com'+ str(item('.msubstr-row2').attr('href')),'name': item('.author-name').text(),'write_time':item('.time').text(),'comment':item('.icon-cmt+ em').text(),'favorites':item('.icon-fvr+ em').text(),'abstract':item('.mob-sub').text()} for item in lis ] return data

    最后,定義一個 on_result() 方法,該方法專門用來獲取 return 的結果數據。這里用來接收上面 parse_page() 返回的 data 數據,在該方法可以將數據保存到 MongoDB 中。

    ''' 遇到不懂的問題?Python學習交流群:821460695滿足你的需求,資料都已經上傳群文件,可以自行下載! '''# 頁面每次返回的數據 def on_result(self,result):if result:self.save_to_mongo(result) # 存儲到mongo數據庫def save_to_mongo(self,result):df = pd.DataFrame(result) content = json.loads(df.T.to_json()).values()if collection.insert_many(content):print('存儲數據成功')# 暫停1stime.sleep(1)

    好的,保存代碼,修改每秒運行次數和并發(fā)數

    點擊run將代碼跑起來,不過當跑起來之后,就會發(fā)現抓取一個頁面之后程序就停止了, pyspider 以 URL的 MD5 值作為 唯一 ID 編號,ID 編號相同,就視為同一個任務, 不會再重復爬取。

    GET 請求的分頁URL 一般不同,所以 ID 編號會不同,能夠爬取多頁。 POST 請求的URL是相同的,爬取第一頁之后,后面的頁數便不會再爬取。

    解決辦法,需要重新寫下 ID 編號的生成方式,在 on_start() 方法前面添加下面代碼即可:

    def get_taskid(self,task):return md5string(task['url']+json.dumps(task['fetch'].get('data','')))

    基本操作之后,文章入庫

    總結

    以上是生活随笔為你收集整理的分页请求json数据_pyspider抓取虎嗅网文章数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。