最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何使用python爬虫论坛?

    正文概述    2020-06-12   372

    除了之前跟大家讲述过的视频、音乐以及时事新闻,关于爬虫可以做的事情有很多很多,像论坛也是其中之一,应用最火的内容,之前给大家罗列的爬虫实际内容有很多,但是还是希望将每个实际内容都跟大家说一下。让大家在遇到这些问题时候,可以有个参考,因此,根据大家罗列的清单,给大家继续安排python怎么爬取论坛,一起来看下吧~

    库:requests,re,selenium,time

    具体步骤:

    一、搜索贴吧

    准备一个自己想要爬取的内容

    二、显示贴吧首页的帖子

    要提取发帖人的名字和帖子主题,选择用正则表达式来实现,具体代码如下:

    titles = re.findall('<a rel="noreferrer" href="/p/(\w+)" title="(.*?)"', res.text)
    authors = re.findall('title="主题作者: (.*?)"', res.text)

    三、查看某一个帖子

    通过观察网页源码,可以用正则表达式匹配到这部分回复,然后对于这些回复,也要进行处理后再显示出来。

    comment_list2 = re.findall('post_bubble_middle_inner">(.*?)<div', res.text, re.DOTALL)
    comment = comment_list2[num].replace('<br>', ' ').replace('</div>', ' ')

    具体源码如下:

    import requests
     import time
      import re
     from selenium import webdriver
     
     headers = {
     "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
      "53.0.2785.89 Safari/537.36"
     }
      
     
      class TieBa:
      def __init__(self, name, url):
      self.name = name # 贴吧名
     self.url = url # 贴吧首页的url
     
      # 显示首页上的帖子作者和标题
     def get_homepage(self):
      print("\n\t\t\t\t\t\t{}吧".format(self.name))
     res = requests.get(self.url, headers=headers)
     titles = re.findall('<a rel="noreferrer" href="/p/(\w+)" title="(.*?)"', res.text)
     authors = re.findall('title="主题作者: (.*?)"', res.text)
      for title, author in zip(titles, authors):
      print(str(titles.index(title) + 1) + "--" + author + ":" + title[1])
      print("\n****************************")
      n = int(input("请输入您想要查看的帖子序号:"))
      print("****************************\n")
      self.get_page("https://img.wangzhan5u.com/images/10/rhsyperror.html
      
      # 显示帖子的具体内容
      def get_page(self, page_url):
      res = requests.get(page_url, headers=headers)
      author_list = re.findall('p_author_name j_user_card.*?>(.*?)<', res.text)
      comment_list = re.findall('content clearfix">(.*?)</div>', res.text, re.DOTALL)
      if len(comment_list) == 0:
      comment_list = re.findall('d_post_content j_d_post_content ">(.*?)</div>', res.text, re.DOTALL)
     
     # 带回复框的单独考虑
      comment_list2 = re.findall('post_bubble_middle_inner">(.*?)<div', res.text, re.DOTALL)
      num = 0
     
      # 处理图片和表情,显示对应的链接
     for author, comment in zip(author_list, comment_list):
      print(author.strip(), end=" : ")
      comment = comment.strip().replace('<br>', ' ')
      if "<div" in comment: # 解析有评论框的评论
      comment = comment_list2[num].replace('<br>', ' ').replace('</div>', ' ')
      num += 1
      if "src" in comment: # 处理图片信息
      src_list = re.findall('src="(.*?)"', comment)
     pattern_list = re.findall('(<img.*?>)', comment)
      for s, p in zip(src_list, pattern_list):
      comment = comment.replace(p, ' ' + s)
      if "href" in comment: # 处理表情信息
      pattern_list = re.findall('(<a .*? >)', comment)
     for p in pattern_list:
      comment = comment.replace(p, ' ').replace("</a>", '')
     print(comment)
      
      while True:
     x = int(input("\n输入1查看下一页,输入0回到首页,输入-1退出程序:"))
      if x == -1:
      exit()
      if x == 0:
      self.get_homepage()
      if x == 1:
      next_page = re.findall('<a href="(.*?)">下一页', res.text)
      if len(next_page)>0:
      self.get_page("http://tieba.baidu.com" + next_page[0])
      else:
      print("已经是最后一页了!")
       
      # 利用selenium模拟浏览器查找贴吧
      def search():
      chrome_options = webdriver.ChromeOptions()
      chrome_options.add_argument('--headless')
      browser = webdriver.Chrome(chrome_options=chrome_options)
     
      browser.get("https://img.wangzhan5u.com/images/10/rhsyp
      name = input("请输入想要进入的贴吧名字:")
      browser.find_element_by_xpath('//*[@id="wd1"]').send_keys(name)
      browser.find_element_by_xpath('//*[@id="tb_header_search_form"]/span[1]/a').click()
     url = browser.current_url
     if "tieba.baidu.com/f?ie=utf-8" in url: # 搜索的贴吧存在
      print("正在进入{}吧,请稍等...".format(name))
      time.sleep(2)
      t = TieBa(name, url)
      t.get_homepage()
      else:
      print("没有找到{}吧\n".format(name))
      main()
      
      
     def main():
     x = int(input("输入1搜索进入贴吧,输入-1退出程序:"))
      if x == 1:
      search()
      else:
     exit()
     
     if __name__ == '__main__':
    main()

    好了,以上就是爬取论坛的内容了,如果大家遇到这种问题,可以来看下小编的这篇内容,很容易解决的哦~


    下载网 » 如何使用python爬虫论坛?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元