范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python爬虫面向知乎的答案提取和图片下载

  需求描述: 爬取知乎的答案,爬取并下载一个问题下所有回答中的图片。
  实现平台: 开发工具PyCharm2017,语言版本Python3.6,Chrome谷歌浏览器。
  基本原理: 1.发送请求,获取网页HTML源码;解析HTML,获取数据;保存数据。2
  模拟浏览器登录,获取并解析HTML,获取数据。利用Python中的库即可便捷实现。
  功能实现1:知乎答案爬取
  实现思路:
  1. 首先实现安装好第三方模块requests和bs4并调用。
  2. 其次设置Http请求头,利用requests访问网页获取到源代码,利用bs模块中的BeautifulSoup得到解析过后的html。
  3. 随后,分别通过对照网页源代码中标签内容进行匹配,分别获取问题标题、问题内容、点赞数以及答案等内容。
  4. 最后进行包括知乎答案等信息的打印。
  分别对应上述思路进行代码编写。
  1. 调用第三方模块。
  #-*- coding: UTF-8 -*-
  # 爬取知乎答案
  import requests
  from bs4 import BeautifulSoup
  2. 设置Http请求头:可以在Chrome谷歌浏览器的网页中的任意地方按下F12,打开chrome自带的调试工具,在调试工具中选择network标签,F5刷新网页后在左边找到该网页url,点击该url,选择Headers,就可以看到当前网页的Http头。复制到header={}中。
  获取源代码并解析:利用requests和BeautifulSoup实现,并返回解析后的body。
  #获取网页body里的内容
  def get_content(url , data = None):
  # 设置Http请求头,根据自己电脑查一下
  header={
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip, deflate, sdch",
  "Accept-Language": "zh-CN,zh;q=0.8",
  "Connection": "keep-alive",
  "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235"
  }
  req = requests.get(url, headers=header)
  req.encoding = "utf-8"
  bs = BeautifulSoup(req.text, "html.parser") # 创建BeautifulSoup对象
  body = bs.body #
  return body
  3. 标签内容进行class匹配:问题标题——QuestionHeader-title,问题内容——RichText ztext,点赞量——Button VoteButton VoteButton—up,问题回答——ContentItem-time。
  #获取问题标题
  def get_title(html_text):
  data = html_text.find("h1", {"class":" QuestionHeader-title "}) #匹配标签
  return data.string.encode("utf-8")
  #获取问题内容
  def get_question_content(html_text):
  data = html_text.find("span", {"class": "RichText ztext"})
  print (data.string)
  if data.string is None:
  out = ""
  for datastring in data.strings:
  datastring = datastring.encode("utf-8")
  out = out + datastring.encode("utf-8")
  print ("内容: " + out)
  else:
  print ("内容: " + data.string.encode("utf-8"))
  #获取点赞数
  def get_answer_agree(body):
  agree = body.find("button",{"class": "Button VoteButton VoteButton--up"})
  agree_html = BeautifulSoup(str(agree), "html.parser")
  all_buttons = agree_html.find_all("button", {"class": "Button VoteButton VoteButton--up"})
  one_button = all_buttons[0]
  agree_number = one_button["aria-label"]
  print(agree_number)
  #获取答案
  def get_response(html_text):
  out1 = ""
  response = html_text.find_all("p", {"class": "ContentItem-time"})
  for index in range(len(response)):
  #获取标签
  answerhref = response[index].find("a", {"target": "_blank"})
  if not(answerhref["href"].startswith("javascript")):
  url = "http:" + answerhref["href"]
  body = get_content(url)
  get_answer_agree(body)
  answer = body.find("span", {"class": "RichText ztext CopyrightRichText-richText css-hnrfcf"})
  if answer.string is None:
  out = ""
  for datastring in answer.strings:
  datastring = datastring.encode("utf-8")
  out = out + " " + str(datastring,encoding = "utf-8")
  else:
  print (answer.string.encode("utf-8"))
  out1 = out1 + " " + out
  return url + " " + out1
  4. 结果输出打印:以一个网址为例,调用之前编写的函数,进行信息的获取和打印。
  # 输入要爬取的网址
  URL_target = "https://www.zhihu.com/question/505503990/answer/2276487889"
  html_text = get_content(URL_target)
  title = get_title(html_text)
  print ("标题:" + str(title,encoding = "utf-8") + " ")
  data = get_response(html_text)
  print (data)
  功能实现2:知乎图片下载
  实现思路:
  1. 首先实现安装好chromedriver模拟人为登录浏览器,模拟登录网页,中途拿手机扫码登录。
  2. 安装好模块selenium、time、urllib.request 、bs4 和html.parser并调用。
  3. 利用chromedriver打开浏览器并登录知乎,利用bs模块中的BeautifulSoup得到解析过后的html。
  4. 随后,找到照片并进行下载。
  5. 保存所有图片。
  思路是先模拟登录网页,(中途拿手机扫码登录),然后逐步爬取所有回答。
  1.下载对应Chrome版本的chromedriver。
  通过chrome://version/查看版本,下载chromedriver后解压安装。详细可以参考这个说明。
  selenium 安装与 chromedriver 安装 :https://www.cnblogs.com/lfri/p/10542797.html
  我的Chrome版本是:94.0.4606.71(正式版本)(64 位),对应文件夹应该放在
  C:Program FilesGoogleChromeApplication
  2.分别对应上述思路进行代码编写,安装好模块并调用。
  # 爬取知乎问题下的所有图片
  from selenium import webdriver
  import time
  import urllib.request
  from bs4 import BeautifulSoup
  import html.parser
  3.自动化打开浏览器并扫码登录知乎,并解析网页 HTML 信息,查找所有的noscript标签。
  def main():
  # 确保文件夹中有chromedriver.exe,有的在C:Program Files x86
  chromedriver = "C:Program FilesGoogleChromeApplicationchromedriver.exe"
  driver = webdriver.Chrome(chromedriver)
  time.sleep(5)
  driver.get("https://www.zhihu.com/question/287084175") # 打开想要爬取的知乎页面
  time.sleep(5)
  # 模拟用户操作
  def execute_times(times):
  for i in range(times):
  driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
  time.sleep(3)
  try:
  driver.find_element_by_css_selector("button.QuestionMainAction").click()
  print("page" + str(i))
  time.sleep(1)
  except:
  break
  # 执行次数
  execute_times(5)
  # 原网页的信息
  result_raw = driver.page_source # 这是原网页 HTML 信息
  result_soup = BeautifulSoup(result_raw, "html.parser")# 然后将其解析
  result_bf = result_soup.prettify() # 结构化原 HTML 文件
  with open("D:/python安装包/PycharmProjects/zhihutupian/raw_result.txt", "w",encoding="utf-8") as raw_result: # 存储路径里的文件夹需要事先创建。
  raw_result.write(result_bf)
  raw_result.close()
  print("爬取回答页面成功!!!")
  with open("D:/python安装包/PycharmProjects/zhihutupian/noscript_meta.txt", "wb") as noscript_meta:
  noscript_nodes = result_soup.find_all("noscript") # 找到所有node
  noscript_inner_all = ""
  for noscript in noscript_nodes:
  noscript_inner = noscript.get_text() # 获取node内部内容
  noscript_inner_all += noscript_inner + " "
  noscript_all = html.parser.unescape(noscript_inner_all).encode("utf-8") # 将内部内容转码并存储
  noscript_meta.write(noscript_all)
  noscript_meta.close()
  print("爬取noscript标签成功!!!")
  4.查找所有图片并命名下载。
  img_soup = BeautifulSoup(noscript_all, "html.parser")
  img_nodes = img_soup.find_all("img")
  with open("D:/python安装包/PycharmProjects/zhihutupian/img_meta.txt", "w") as img_meta:
  count = 0
  for img in img_nodes:
  if img.get("src") is not None:
  img_url = img.get("src")
  line = str(count) + "	" + img_url + " "
  img_meta.write(line)
  urllib.request.urlretrieve(img_url, "D:/python安装包/PycharmProjects/zhihutupian/" + str(count) + ".jpg") # 一个一个下载图片
  count += 1
  img_meta.close()
  print("图片下载成功")
  if __name__ == "__main__":
  main()
  5.最后进行包括知乎图片的保存。
  最后,有相关爬虫需求欢迎通过公众号联系我们.
  公众号: 320科技工作室

低密度脂蛋白比较高,是什么原因?怎么使它降下来?王医生,我这血脂正常的,怎么还给我开降脂药?患者老孟这样问,质问!老孟是心绞痛的患者,经过王医生调整心率血压抗心绞痛抗血小板聚集稳定斑块等治疗,目前心绞痛不犯了,但是王医生告诉他还你支持将芯片做成白菜价吗?美国已经愚蠢到了利用自己短暂的科技优势,对我国进行打压的地步了。这说明美国对我国的高科技企业,已经黔驴技穷了。但是,如此短视的科技思维,这不是正在为自己的未来挖坑吗?假如我国将美国职校学什么专业好?1。适合自己的专业,自己有某方面兴趣爱好和特长,刚好可以运用在专业上的,喜欢美术的选择服装设计计算机类的广告设计等。2。自己喜欢的专业,喜欢和爱好,你才心甘情愿地付出,你的收获也更山东农业大学与山东师范大学哪个好?您好,很高兴回答你提出的问题,针对于你提出的问题,我将用自己的见解帮你解答。公说公有理,婆说婆有理,关于高校哪一个比较好,特别是差别不是很大的高校,一直以来都是饱受争议。山东农业大把人的某重要器官取出,人会立刻死亡吗?除了大脑,或许没有任何一个器官取出人会立即死亡。大脑重要的地方不在于产生了意识,而是控制着很多基础的生理功能,没有了大脑心跳呼吸都无法再维持,数分钟内人就死亡。脑是人全身最重要的器手上有一百万现金,是买银行保本理财好还是大额存单好?100万我既不推荐保本理财,也不推荐大额存单我推荐股份制银行的定期存款。为什么这样?我们对比一下,这三种理财方式的收益和风险比就OK了。第一,我们说理财产品。现在理财产品的刚性兑付如果一家上市公司的前十大流通股股东中,没有一家机构也没有一家基金,这意味着什么?A股自从经历了2015年的牛市之后,就开始暴跌。跌下来之后市场资金就变少了。人们操作就更加谨慎了。但是,IPO不断在发行,个股数量不断在增加,成交量却在不断萎缩。反映出来就是供过于面试后让回去等通知,这样还有机会吗?首先,你这个跟之前我的一位读者有点类似张工是一名软件开发人员,主要擅长java开发,两年工作经验。有次,张工去面试,笔试题做了,感觉还不错,要是打分的话,应该在90分以上。对于面试酒店大堂经理一个月工资是多少钱?首先该问题比较笼统,没有明确区域城市酒店类型等信息,只是泛泛的对这个职位的薪酬问询,所以回答起来很难有针对性,本人就从酒店行业的整体来给您分析解答吧。近年来,国家经济进入转型期,从试管婴儿和普通婴儿有何区别?我朋友孩子今年大三,但他在小男孩时期就喜欢像大人一样很严肃地和我说话,配上他清秀得像女孩子一样的面孔,特别可爱。他13岁那年夏天,我们一同去西藏旅游,漫长的卧铺车厢颇有些大学卧谈会你有过把孩子弄丢的经历吗?后来是怎么找到的?谢邀请!我有亲身体会把我女儿弄丢了!那时我女儿才四岁多,跟着我们在外打工,因为我每天买菜做我工人的饭,那时只有自行车骑,不能带她去,市场有十多里,我不知道女儿跟着我在后面追,当我买
英国追随美国盲目反华,已产生严重后果?华为或放弃80亿投资计划作者战忽速递据英国每日电讯报消息称,华为可能要放弃在英国剑桥园区投资价值80亿人民币的研究区建造计划。据悉,2018年华为花费3700万英镑购买了这块500英亩的土地,并在2020一觉醒来又有3个好消息传来!终于有提案深得民心,人民盼望通过万众瞩目的两会正在如火如荼的召开,每一届的两会,老百姓都会给与很高的关注,因为两会会审议各位人大代表提交的提案,而很多提案都和老百姓的生活息息相关,可以帮助解决老百姓的很多难题。据戴斌委员一带一路带火沿线旅游,促进民心相通成效显著北京日报客户端记者吴娜今年将迎来共建一带一路倡议10周年。旅游是一带一路交流合作的重要领域之一,是传播文明交流文化增进友谊的桥梁,是增进人民亲近感的最好方式。全国政协委员中国旅游研不仅仅是华为,28家我国科技企业也被美列入实体清单根据集微网的最新消息,除了之前华为商务部计划禁止所有美国企业对华为出口许可后,美国又更新了对我国企业的打击目标,最新消息显示,目前又有28家中国科技企业被美国商务部列入实体清单,其县以下国企,除非涉及民生,非必要不保留两千年左右,轰轰烈烈的国企拉开帷幕,经过这一轮国企改革,县以下国企几乎不存在了,这轮改革,极大的激发了市场活力,从此经济迈入快速增长轨道,GDP连续十多年平均增长10以上。进入10泽连斯基称愿意与俄和谈,但有前提中美都要参加持续了一年多的俄乌冲突,何时和谈并促成战争早日结束成为人们关注焦点。近段时间,泽连斯基终于松口,表示愿意和俄罗斯和谈,但是中美两国都要参加。围绕俄乌冲突的和谈从冲突初期就开始出现,CBA积分榜丨王晗战旧主,琼斯371711,吉林10192胜山东2023年3月8日,CBA常规赛第32轮,吉林东北虎10192战胜山东高速。本场比赛的两大看点,山东队主教练王晗战旧主,王晗此前一直在吉林队执教,球员时期也效力吉林。山东队助理教练猪价变脸预警,羊价涨翻天,油价破8,玉米要变天!咋了阳春三月,春光无限。农产品市场再度迎来新的变局。生猪市场结束4天连续下跌,呈现惊天逆转,全线上涨,然而3月9日却出现大面积下跌养羊市场步步走强,市场热情持续上升玉米市场似乎生无可恋这些蔬菜含有高嘌呤,紫菜无缘上榜,不想尿酸升高,劝你别碰很多高尿酸的朋友都知道,尿酸浓度的高低与嘌呤含量密切相关,如果摄取太多含高嘌呤食物,就会代谢出更多尿酸,造成尿酸大量聚集,浓度升高。所以高尿酸患者是需要控制饮食的,特别是不要吃太多蔬菜也并非都是低嘌呤,医生解释若想降尿酸,尽量别吃这4种高尿酸是继三高高血糖高血压高血脂后的地势高,属于嘌呤代谢障碍所导致的慢性代谢性疾病,最终造成尿酸升高。尿酸值长期处于非正常范围且没有得到及时控制,就会产生尿酸盐沉淀于关节处,诱发痛手机不会截屏?教你两个办法,一看就会,简单易操作还实用你会手机截屏吗?你知道截屏需要按哪些开关吗?众所周知,我们在平时使用手机的过程中,经常都会使用到截屏的功能。比如学校老师给孩子布置的家庭作业,我们就要把它截屏下来,慢慢的一个对照一