博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫_获取知乎最多100篇文章
阅读量:2430 次
发布时间:2019-05-10

本文共 3805 字,大约阅读时间需要 12 分钟。

这几天经常上知乎,觉得里面有些文章或者回答确实不错。就花了晚上时间写了这个爬虫。以前没有用Python写过独立的程序,所以这个程序bug比较多。现在贴出的代码可以运行,会在同级目录上生成zhihu_jingxuan.txt,该txt中就是爬取的文章。主要的问题是,当爬取的文章过多时,就会报超出最大循环嵌套数的错误。简单的查了一下,python最大允许的循环前套数是10000。用到了beautifulsoup库,觉得它里面获取标签的时候应该是用了迭代,导致超出了最大循环数。再次记录一下,有空看看源码。

[python]
  1. #coding:utf-8  
  2. import urllib  
  3. from bs4 import BeautifulSoup  
  4. import re  
  5.   
  6. url = ”http://www.zhihu.com”  
  7. filename = ”zhihu_jingxuan.txt”  
  8.   
  9. def parseArticleFromHtml(html):  
  10.     soup = BeautifulSoup(html)  
  11.     result = ”<<”+soup.html.head.title.string+“>>\r\n”  
  12.       
  13.     for i in soup.findAll(‘div’,{
    ‘class’:‘zm-editable-content’}):  
  14.         tmp = i  
  15.         if tmp is not None:  
  16.             tmp2 = str(tmp)  
  17.             tmp3 = re.sub(’<[^>]+>’,“\r\n”,tmp2)  
  18.             result += ”*************************\r\n”  
  19. #           try:  
  20.             result += tmp3  
  21.             result +=”\r\n”           
  22. #           except:  
  23. #               continue  
  24.     result +=”<><><><><><><><><><>”  
  25.     for ii in range(5):  
  26.         result = result.replace(”\r\n\r\n”,“\r\n”)  
  27.     return result  
  28.   
  29. def parseArticleFromLink(link):  
  30.     print link  
  31.     html = urllib.urlopen(link)  
  32.     content = html.read()  
  33.     html.close()  
  34.   
  35. #   try:  
  36.     article_string = parseArticleFromHtml(content)  
  37.     myfilewriter = file(filename,’a+’)    
  38.     myfilewriter.write(”\r\n”)  
  39.     myfilewriter.write(article_string)    
  40.     myfilewriter.close()  
  41. #   except UnicodeEncodeError:  
  42. #       pass  
  43.       
  44.     return  
  45.   
  46. mylist = []  
  47. html = urllib.urlopen(url)  
  48. content = html.read()  
  49. html.close()  
  50. soup = BeautifulSoup(content)  
  51. info_cards = soup.findAll(’a’,{
    ‘class’:‘rep’})  
  52. for an_info_cards in info_cards:  
  53.     print an_info_cards.span.string  
  54.     newlink = url+dict(an_info_cards.attrs)[”href”]  
  55.     newhtml = urllib.urlopen(newlink)  
  56.     newcontent = newhtml.read()  
  57.     newhtml.close()  
  58.     newsoup = BeautifulSoup(newcontent)  
  59.     question_links = newsoup.findAll(’a’,{
    ‘class’:‘question_link’})  
  60.     for a_question_link in question_links:  
  61.         article_link = url+dict(a_question_link.attrs)[”href”]  
  62. #         parseArticleFromLink(article_link)  
  63.         if “answer” in article_link:  
  64.             mylist.append(article_link)  
  65.   
  66.   
  67. print len(mylist)  
  68. counter = 100  
  69. if(len(mylist)>counter):  
  70.     for item in range(counter):  
  71.         print item  
  72.         parseArticleFromLink(mylist[item])  
  73. else:  
  74.     for item in mylist:  
  75.         parseArticleFromLink(item)  
#coding:utf-8import urllibfrom bs4 import BeautifulSoupimport reurl = "http://www.zhihu.com"filename = "zhihu_jingxuan.txt"def parseArticleFromHtml(html):    soup = BeautifulSoup(html)    result = "<<"+soup.html.head.title.string+">>\r\n"    for i in soup.findAll('div',{'class':'zm-editable-content'}):        tmp = i        if tmp is not None:            tmp2 = str(tmp)            tmp3 = re.sub('<[^>]+>',"\r\n",tmp2)            result += "*************************\r\n"            result += tmp3            result +="\r\n"             result +="<><><><><><><><><><>"    for ii in range(5):        result = result.replace("\r\n\r\n","\r\n")    return resultdef parseArticleFromLink(link):    print link    html = urllib.urlopen(link)    content = html.read()    html.close()    article_string = parseArticleFromHtml(content)    myfilewriter = file(filename,'a+')      myfilewriter.write("\r\n")    myfilewriter.write(article_string)      myfilewriter.close()    returnmylist = []html = urllib.urlopen(url)content = html.read()html.close()soup = BeautifulSoup(content)info_cards = soup.findAll('a',{'class':'rep'})for an_info_cards in info_cards:    print an_info_cards.span.string    newlink = url+dict(an_info_cards.attrs)["href"]    newhtml = urllib.urlopen(newlink)    newcontent = newhtml.read()    newhtml.close()    newsoup = BeautifulSoup(newcontent)    question_links = newsoup.findAll('a',{'class':'question_link'})    for a_question_link in question_links:        article_link = url+dict(a_question_link.attrs)["href"]        if "answer" in article_link:            mylist.append(article_link)print len(mylist)counter = 100if(len(mylist)>counter):    for item in range(counter):        print item        parseArticleFromLink(mylist[item])else:    for item in mylist:        parseArticleFromLink(item)

转载地址:http://irvmb.baihongyu.com/

你可能感兴趣的文章
漫画:如何给女朋友解释什么是编译与反编译
查看>>
刷屏了!这篇 Python 学习贴,90% 的程序员都用的上!
查看>>
漫画:如何给女朋友解释什么是适配器模式?
查看>>
拒绝与其他码农一致!CSDN定制T让你成为最靓的仔
查看>>
程序员情商低?看完这 4 类程序员我懂了!
查看>>
《长安十二时辰》里你不能不知道的 IT 技术 | 每日趣闻
查看>>
程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!
查看>>
一年参加一次就够,全新升级的 AI 开发者大会议程出炉!
查看>>
基于 XDanmuku 的 Android 性能优化实战
查看>>
基于嵌入式操作系统的物联网安全
查看>>
一个只有 99 行代码的 JS 流程框架
查看>>
移动周刊第 186 期:移动 App 客户端性能优化、iOS 开源库源码解析
查看>>
包学会之浅入浅出 Vue.js:开学篇
查看>>
JavaScriptCore 全面解析 (上篇)
查看>>
移动周刊第 187 期:App 模块化实战经验总结
查看>>
以不一样的视角看物联网协议
查看>>
JavaScriptCore全面解析 (下篇)
查看>>
嵌入式操作系统与物联网演进之路
查看>>
苹果公司揭秘首批列入 Swift 源代码兼容性开源项目清单
查看>>
Python 玩转物联网之 Micropython GPIO IRQ 处理
查看>>