python登录知乎后怎样点击他人主页的更多按钮( 二 )
■网友
问题太长了,超过3000字限制,所以提在这里。以下是原问题:-----------------------------------------------------------------------------------------------------------------------------------------在上搜过这个问题,给的方法一是用selenium,二是找POST了什么内容,就没有更详细的回答了。我是想写一个比较绅士的爬虫,能够爬下来轮子哥最近赞过的有答案里的漂亮妹子图片。于是就遇到了如上的问题。我暂时还不想用太多第三方的库,就找到点击更多时的行为,发现如下:

这个start是他主页里最后一个动态的data-time。这是产生的一个activity。还有一个POST是叫batch,但我感觉那个不是,因为那个没有form data,只有一个request payload。batch长这样:

【python登录后怎样点击他人主页的更多按钮】
于是我当时觉得,只要找到那个start,然后POST到主页加activities的那个网址就能完成我的要求了。然后经过反复调试,我完成了我的代码:(版本3.4.3,编译器IDLE)import urllib.request as urimport urllib.parse as upfrom http.cookiejar import CookieJarimport refrom bs4 import BeautifulSoupimport osimport timeurl = \u0026#39;http://www.zhihu.com/\u0026#39;#构造openercj = CookieJar()opener = ur.build_opener(ur.HTTPCookieProcessor(cj))opener.addheader = #获取_xsrfdef get_xsrf(): url = \u0026#39;http://www.zhihu.com/\u0026#39; response = opener.open(url) html = response.read() soup = BeautifulSoup(html,\u0026#39;html.parser\u0026#39;) val = soup.find(attrs = {\u0026#39;name\u0026#39;:\u0026#39;_xsrf\u0026#39;}) value = https://www.zhihu.com/api/v4/questions/50223370/val return value#登录url2 = /u0026#39;/u0026#39;.join()data = {}data = get_xsrf()data = 秘密data = /u0026#39;cn/u0026#39;data = /u0026#39;true/u0026#39;data = 秘密response2 = opener.open(url2,up.urlencode(data).encode(/u0026#39;utf-8/u0026#39;))#轮子哥主页!url_lunzi = /u0026#39;https://www.zhihu.com/people/excited-vczh/u0026#39;response3 = opener.open(url_lunzi)html2 = response3.read().decode(/u0026#39;utf-8/u0026#39;)soup2 = BeautifulSoup(html2,/u0026#39;html.parser/u0026#39;)#寻找他赞过的答案answer = while 1: if len(answer) /u0026lt; 30: a = soup2.find_all(name=/u0026#39;div/u0026#39;, class_="zm-profile-section-item zm-item clearfix") start = a#找start的值 url_more = \u0026#39;https://www.zhihu.com/people/excited-vczh/activities\u0026#39; data_more = {\u0026#39;start\u0026#39;:start} response3 = opener.open(url_more, up.urlencode(data_more).encode(\u0026#39;utf-8\u0026#39;)) html3 = response3.read().decode(\u0026#39;utf-8\u0026#39;)#点击更多 soup3 = BeautifulSoup(html3,\u0026#39;html.parser\u0026#39;) allanswer = soup3.find_all(name = \u0026#39;div\u0026#39;, class_ = "zm-profile-section-main zm-profile-section-activity-main zm-profile-activity-page-item-main", ) for i in range(len(allanswer)-1,-1,-1):#过滤不要的答案 if allanswer in answer: del allanswer elif \u0026#39;赞同了回答\u0026#39; not in allanswer.span.next_sibling: del allanswer elif not re.search(r\u0026#39;女|胸|臀|腿|穿|身材\u0026#39;,allanswer.span.next_sibling.next_sibling.text): del allanswer answer = allanswer time.sleep(10)#害怕太快被封了 else: break#下载图片route = \u0026#39;D:\\\\vczh_pic\u0026#39;try: os.mkdir(route)except: passfinally: os.chdir(route)for each in answer: link = each.span.next_sibling.next_sibling link = \u0026#39;\u0026#39;.join() res = opener.open(link).read().decode(\u0026#39;utf-8\u0026#39;) soup = BeautifulSoup(res,\u0026#39;html.parser\u0026#39;) pic = soup.find_all(attrs = {\u0026#39;data-rawwidth\u0026#39;:\u0026#39;1280\u0026#39;,\u0026#39;class\u0026#39;:\u0026#39;origin_image zh-lightbox-thumb lazy\u0026#39;}) for each_pic in pic: pic_name = re.sub(r\u0026#39;https://pic\\d\\.zhimg\\.com/\u0026#39;,\u0026#39;\u0026#39;,each_pic) with open(pic_name,\u0026#39;wb\u0026#39;) as f: src = https://www.zhihu.com/api/v4/questions/50223370/each_pic pic_res = ur.urlopen(src).read() f.write(pic_res)
推荐阅读
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 怎样成为一名合格的Python程序员?
- 知乎有没有必要增加一个特别关注功能
- python 爬虫,咋获得输入验证码之后的搜索结果
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- 零基础入门学习啥语言好
- 像知乎豌豆夹这种新兴互联网公司发展的实际状况咋样
- 只看报纸、杂志、知乎、微博等文字而很少阅读书籍的人,和喜欢看书的延迟接受信息的人,哪种会比较优秀呢
- QQ在pc端同时登录两个为啥不会发生ip地址冲突
