怎样抓取知乎问题下的所有回答中的所有图片( 二 )
以下代码请自行增删修改,比如换个问题,加大offset上限..etc代码:#! /usr/bin/env pythonfrom urlparse import urlsplitfrom os.path import basenameimport urllib2import reimport requestsimport osimport jsonimport urllibif not os.path.exists(\u0026#39;images\u0026#39;): os.mkdir("images")page_size = 50offset = 0x=0id=37787176url = \u0026#39;https://www.zhihu.com/question/37787176\u0026#39;url_content = urllib2.urlopen(url).read()while offset \u0026lt; 100: get_url = \u0026#39;https://www.zhihu.com/api/v4/questions/37787176/answers?sort_by=default\u0026amp;include=data%5B%2A%5D.is_normal%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Cmark_infos%2Ccreated_time%2Cupdated_time%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B%2A%5D.author.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics\u0026amp;limit=20\u0026amp;offset=\u0026#39;+str(offset) header = { \u0026#39;User-Agent\u0026#39;: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0", \u0026#39;Host\u0026#39;: "www.zhihu.com", \u0026#39;Referer\u0026#39;: "https://www.zhihu.com/question/37787176", \u0026#39;Authorization\u0026#39; :"Bearer Mi4wQUJDTXVUc0Y5QWdBSUFMS0RiVk5DeGNBQUFCaEFsVk4tQTFiV1FBZVpkaHBZRTFDWVh3OXJtZlpGa0x2MkpfSk9n|1497494260|7cc3b8925cfc9e47ef0e2bb6a8e96d45827deb2d" } req = urllib2.Request(get_url, headers = header) response=urllib2.urlopen(req).read() txt=json.loads(response) print txt offset += 20 img_urls = re.findall(\u0026#39;img .*?src="https://www.zhihu.com/api/v4/questions/34867032/(.*?_b.*?)"\u0026#39;, str(txt)) for img_url in img_urls: try: x+= 1 img_data = https://www.zhihu.com/api/v4/questions/34867032/urllib2.urlopen(img_url).read() # file_name = basename(urlsplit(img_url)) output = open(/u0026#39;images/u0026#39; +str(x), /u0026#39;wb/u0026#39;) output.write(img_data) output.close() except: passprint x
■网友import requestsfrom bs4 import BeautifulSoupimport reimport lutilsimport dbmimport sysimport time"""判断是否是包含图片后缀的url"""def is_imag_url(string): pattern = r\u0026#39;http://+\\.(png|jpeg|jpg|jpe|ico|gif)\u0026#39; b = re.findall(pattern, string) != return b """获取显示在当前页面的图片链接""" def get_src_url(soup) : current_imag = soup.find_all(src=https://www.zhihu.com/api/v4/questions/34867032/True) url_set = set() for tag_url in current_imag: url = tag_url if is_imag_url(url): url_set.add(url) return url_set"""获取显示可以点击的图片链接""" def get_href_url(soup) : href_imag = soup.find_all(href=https://www.zhihu.com/api/v4/questions/34867032/True) url_set = set() for url in href_imag: url = url if is_imag_url(url): url_set.add(url) return url_set"""综合方法,通过which就可以确定要的到那种链接1:当前页面的图片src2:链接图片href3:所有的图片返回的是set"""def html_filter(html, which=3): soup = BeautifulSoup(html, "html.parser") if which == 1 : print(get_src_url(soup)) return get_src_url(soup) if which == 2: print(get_href_url(soup)) return get_href_url(soup) if which == 3 : url_set = get_src_url(soup) | get_href_url(soup) return url_set if __name__ == "__main__": print("*"*25) url = "http://www.zhihu.com/question/34815186" print("大王,收到命令,开始执行获取命令:url=" + url) html = lutils.get_html(url=url) print("大王,搞定了,开始解析:url=" + url) url_set = html_filter(html, which=3) length = len(url_set) index = 1 for url in url_set : try : lutils.download(url=url, name=re.split(\u0026#39;/\u0026#39;, url), path="F:\\garbage") print("大王,完成了{}/{}个".format(index, length)) index += 1 except Exception as e: print(e) input("输入任意键关闭") break input("输入任意键关闭")
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 知乎有没有必要增加一个特别关注功能
