python能在生活中做什么,python騙局-我終于在生活中用到Python了!!!——用爬蟲來揭露騙局真相

 2023-11-18 阅读 26 评论 0

摘要:事情的起因 前一陣突然收到了這樣一封私信 python能在生活中做什么? 假約稿,真廣告 來簡書也有一段時間了,這種私信收到了不少,基本都是打著約稿的旗號來騙關注的。其實我覺得主動要求別人的關注沒有問題,但是應該明目張膽、大張旗鼓的才對ÿ

事情的起因

前一陣突然收到了這樣一封私信

python能在生活中做什么?35a85ee14f7b

假約稿,真廣告

來簡書也有一段時間了,這種私信收到了不少,基本都是打著約稿的旗號來騙關注的。其實我覺得主動要求別人的關注沒有問題,但是應該明目張膽、大張旗鼓的才對,哪能這樣鬼鬼祟祟,企圖瞞天過海?看了看這個作者,居然還是個專題編輯呢。

python爬蟲教程、35a85ee14f7b

image.png

所以我就試探的問問她,既然想約稿,那么到底有沒有看過我的文章。

python怎么用、35a85ee14f7b

image.png

那么現在問題來了,我在簡書上也有將近1500個贊了,其中到底有沒有這位同志的贊呢?自己手動去看看?這可不是程序員的答案!我們的答案是爬蟲!

獲取用戶timeline

可以很容易的看出,https://www.jianshu.com/users/5aa8494a18c8/timeline 這樣的url就是用戶的timeline,但是頁面默認只展示一部分,更早的timeline是瀏覽器下拉后獲取的。用瀏覽器的開發者工具可以看到請求信息。

35a85ee14f7b

動態加載的timeline

page這個參數顯而易見,那么max_id是怎么來的呢?首先要看看這些請求是哪里發出來的。

35a85ee14f7b

查看請求調用關系

這個看著信息量好大

35a85ee14f7b

這個函數看著最像

再看看s函數,終于找到了max_id的獲取方式

35a85ee14f7b

max_id

max_id可以根據最后一個li元素的id屬性獲得。

利用requests庫進行爬取

requests庫就不多介紹了,這里注意兩點:

要手動設置請求的header,來模擬正常瀏覽器

ajax請求要設置額外的header,來模擬下拉刷新

對每次請求下載的response,使用lxml解析,然后利用xpath獲取最后一個li元素,進而計算max_id。再用計算出的max_id發起新的請求。

當返回的文本中包含"加入了簡書”則停止爬取。

爬取結果分析

爬取了該用戶的所有動態,存儲到了一個文本文件中,在其中搜索"大神帶我來搬磚”,未找到任何結果。所以該用戶根本沒給我點贊過。

35a85ee14f7b

image.png

當然,后來我又學會了用selenium來完成同樣的工作。

源碼

import requests

from lxml import etree

my_header = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"

res = requests.get(url='https://www.jianshu.com/users/5aa8494a18c8/timeline', headers={'user-agent': my_header})

if '大神帶我來搬磚' in res.text:

print('found')

page = etree.HTML(res.text)

last_li = page.xpath('''//ul[@class="note-list"]/li[last()]''')[0]

max_id = int(last_li.get('id').split('-')[1]) - 1

file = open("activity.txt",'w',encoding='utf-8')

page = 2

while True:

res = requests.get(url='https://www.jianshu.com/users/5aa8494a18c8/timeline?max_id=%s&page=%s' %(max_id,page),

headers={'user-agent': my_header, 'X-INFINITESCROLL':'true'})

last_li = etree.HTML(res.text).xpath('''/html/body/li[last()]''')[0]

max_id = int(last_li.get('id').split('-')[1]) - 1

page = page + 1

file.write(res.text)

file.write(" ")

if '加入了簡書' in res.text:

print('end')

break

file.close()

原文作者:大神帶我來搬磚

愛好歷史和武俠,專注java、大數據的程序員小哥哥。

學習資料共享,技術問題討論,希望和大家一起交流進步。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/176782.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息