欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python爬蟲

系統 2341 0

Python并不是我的主業,當初學Python主要是為了學爬蟲,以為自己覺得能夠從網上爬東西是一件非常神奇又是一件非常有用的事情,因為我們可以獲取一些方面的數據或者其他的東西,反正各有用處。

?

這兩天閑著沒事,主要是讓腦子放松一下就寫著爬蟲來玩,上一篇初略的使用BeautifulSoup去爬某個CSDN博客的基本統計信息(http://blog.csdn.net/hw140701/article/details/55048364),今天就想要不就直接根據某個CSDN博客的主頁的地址爬取該博客的所有文章鏈接,進而提取每一篇文章中的元素,我這里是提取每一篇博客

?

一、主要思路

通過分析CSDN博客的網站源碼,我們發現當我們輸入某博客主頁網址時,如:http://blog.csdn.net/hw140701

在主頁會有多篇文章,以及文章的鏈接,默認的是15篇。在主頁博客的底部會有分頁的鏈接,如下圖

? python爬蟲_第1張圖片

如圖所示,一共65篇分5頁,每一頁中又包含了15篇文章的鏈接。

所以我們總體的思路是:

1.輸入博客主頁地址,先獲取當前頁所有文章的鏈接;

2.獲取每個分頁的鏈接地址

3.通過每個分頁的鏈接地址獲取每一個分頁上所有文章的鏈接地址

4.根據每一篇文章的鏈接地址,獲取每一篇文章的內容,直到該博客所有文章都爬取完畢

?

二、代碼分析

2.1分頁鏈接源碼分析

用瀏覽器打開網頁地址,使用開發者工具查看博客主頁網站源碼,發現分頁鏈接地址隱藏在下列標簽之中

? python爬蟲_第2張圖片

所以我們通過下列代碼所有分頁鏈接進行匹配

[python] ?view plain?copy

  1. bsObj.findAll("a",href=re.compile("^/([A-Za-z0-9]+)(/article)(/list)(/[0-9]+)*$")):#正則表達式匹配分頁的鏈接??

bsObj為BeautifulSoup對象

?

2.2分頁上每一篇文章鏈接源碼分析

得到每一個分頁的鏈接后,對每一個分頁上的文章鏈接源碼進行分析,其源碼如下

? python爬蟲_第3張圖片

通過分析,所以我們采取以下的方法進行匹配

[python] ?view plain?copy

  1. bsObj.findAll("a",href=re.compile("^/([A-Za-z0-9]+)(/article)(/details)(/[0-9]+)*$"))??


或者

[python] ?view plain?copy

  1. bsObj.findAll("span",{"class":"link_title"})??


2.3每一篇文章中文字內容源碼分析

通過對每一篇文章中的網站源碼進行分析,發現其內容位于源碼中的以下位置

? python爬蟲_第4張圖片

所以通過下列代碼進行匹配

[python] ?view plain?copy

  1. bsObj.findAll("span",style=re.compile("font-size:([0-9]+)px"))??


3.全部代碼以及結果

現附上全部代碼,注釋部分可能有錯,可以根據此代碼自行修改,去爬取某CSDN博客中的任意元素

?

[python] ?view plain?copy

  1. #__author__?=?'Administrat??
  2. #coding=utf-8??
  3. import ?io??
  4. import ?os??
  5. import ?sys??
  6. import ?urllib??
  7. from ?urllib.request? import ??urlopen??
  8. from ?urllib?? import ?request??
  9. from ?bs4? import ?BeautifulSoup??
  10. import ?datetime??
  11. import ?random??
  12. import ?re??
  13. import ?requests??
  14. import ?socket??
  15. socket.setdefaulttimeout(5000)#設置全局超時函數??
  16. ?
  17. ?
  18. sys.stdout?=?io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')??
  19. headers1={'User-Agent':'Mozilla/5.0?(Windows?NT?6.1;?WOW64;?rv:23.0)?Gecko/20100101?Firefox/23.0'}??
  20. headers2={'User-Agent':'Mozilla/5.0?(Windows?NT?6.3;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/45.0.2454.101?Safari/537.36'}??
  21. headers3={'User-Agent':'Mozilla/5.0?(Windows?NT?6.1)?AppleWebKit/537.11?(KHTML,?like?Gecko)?Chrome/23.0.1271.64?Safari/537.11'}??
  22. ?
  23. #得到CSDN博客某一個分頁的所有文章的鏈接??
  24. articles=set()??
  25. def ?getArticleLinks(pageUrl):??
  26. #設置代理IP??
  27. #代理IP可以上http://zhimaruanjian.com/獲取??
  28. proxy_handler=urllib.request.ProxyHandler({'post':'210.136.17.78:8080'})??
  29. proxy_auth_handler=urllib.request.ProxyBasicAuthHandler()??
  30. opener?=?urllib.request.build_opener(urllib.request.HTTPHandler,?proxy_handler)??
  31. urllib.request.install_opener(opener)??
  32. #獲取網頁信息??
  33. req=request.Request(pageUrl,headers=headers1? or ?headers2? or ?headers3)??
  34. html=urlopen(req)??
  35. bsObj=BeautifulSoup(html.read(),"html.parser")??
  36. global ?articles??
  37. #return?bsObj.findAll("a",href=re.compile("^/([A-Za-z0-9]+)(/article)(/details)(/[0-9]+)*$"))??
  38. #return?bsObj.findAll("a")??
  39. #for?articlelist?in?bsObj.findAll("span",{"class":"link_title"}):??
  40. for ?articlelist? in ?bsObj.findAll("span",{"class":"link_title"}):#正則表達式匹配每一篇文章鏈接??
  41. #print(articlelist)??
  42. if ?'href'? in ?articlelist.a.attrs:??
  43. if ?articlelist.a.attrs["href"]? not ? in ?articles:??
  44. #遇到了新界面??
  45. newArticle=articlelist.a.attrs["href"]??
  46. #print(newArticle)??
  47. articles.add(newArticle)??
  48. #articlelinks=getArticleLinks("http://blog.csdn.net/hw140701")??
  49. #for?list?in?articlelinks:??
  50. #print(list.attrs["href"])??
  51. #print(list.a.attrs["href"])??
  52. ?
  53. #寫入文本??
  54. #def?data_out(data):??
  55. #?with?open("E:/CSDN.txt","a+")?as?out:??
  56. #?out.write('\n')??
  57. #?out.write(data,)??
  58. ?
  59. ?
  60. #得到CSDN博客每一篇文章的文字內容??
  61. def ?getArticleText(articleUrl):??
  62. #設置代理IP??
  63. #代理IP可以上http://zhimaruanjian.com/獲取??
  64. proxy_handler=urllib.request.ProxyHandler({'https':'111.76.129.200:808'})??
  65. proxy_auth_handler=urllib.request.ProxyBasicAuthHandler()??
  66. opener?=?urllib.request.build_opener(urllib.request.HTTPHandler,?proxy_handler)??
  67. urllib.request.install_opener(opener)??
  68. #獲取網頁信息??
  69. req=request.Request(articleUrl,headers=headers1? or ?headers2? or ?headers3)??
  70. html=urlopen(req)??
  71. bsObj=BeautifulSoup(html.read(),"html.parser")??
  72. #獲取文章的文字內容??
  73. for ?textlist? in ?bsObj.findAll("span",style=re.compile("font-size:([0-9]+)px")):#正則表達式匹配文字內容標簽??
  74. print (textlist.get_text())??
  75. #data_out(textlist.get_text())??
  76. ?
  77. #得到CSDN博客某個博客主頁上所有分頁的鏈接,根據分頁鏈接得到每一篇文章的鏈接并爬取博客每篇文章的文字??
  78. pages=set()??
  79. def ?getPageLinks(bokezhuye):??
  80. #設置代理IP??
  81. #代理IP可以上http://zhimaruanjian.com/獲取??
  82. proxy_handler=urllib.request.ProxyHandler({'post':'121.22.252.85:8000'})??
  83. proxy_auth_handler=urllib.request.ProxyBasicAuthHandler()??
  84. opener?=?urllib.request.build_opener(urllib.request.HTTPHandler,?proxy_handler)??
  85. urllib.request.install_opener(opener)??
  86. #獲取網頁信息??
  87. req=request.Request(bokezhuye,headers=headers1? or ?headers2? or ?headers3)??
  88. html=urlopen(req)??
  89. bsObj=BeautifulSoup(html.read(),"html.parser")??
  90. #獲取當前頁面(第一頁)的所有文章的鏈接??
  91. getArticleLinks(bokezhuye)??
  92. #去除重復的鏈接??
  93. global ?pages??
  94. for ?pagelist? in ?bsObj.findAll("a",href=re.compile("^/([A-Za-z0-9]+)(/article)(/list)(/[0-9]+)*$")):#正則表達式匹配分頁的鏈接??
  95. if ?'href'? in ?pagelist.attrs:??
  96. if ?pagelist.attrs["href"]? not ? in ?pages:??
  97. #遇到了新的界面??
  98. newPage=pagelist.attrs["href"]??
  99. #print(newPage)??
  100. pages.add(newPage)??
  101. #獲取接下來的每一個頁面上的每一篇文章的鏈接??
  102. newPageLink="http://blog.csdn.net/"+newPage??
  103. getArticleLinks(newPageLink)??
  104. #爬取每一篇文章的文字內容??
  105. for ?articlelist? in ?articles:??
  106. newarticlelist="http://blog.csdn.net/"+articlelist??
  107. print (newarticlelist)??
  108. getArticleText(newarticlelist)??
  109. #getArticleLinks("http://blog.csdn.net/hw140701")??
  110. getPageLinks("http://blog.csdn.net/hw140701")??
  111. #getArticleText("http://blog.csdn.net/hw140701/article/details/55104018")??

?

?

?

?

?

結果

?

?

在其中有時候會出現亂碼,這是由于有空格的存在,暫時還有找到方法解決。

另外在有的時候會出現服務器沒有響應的錯誤,如下:

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品国产一区二区三区免费 | 991av| 热99re久久精品2久久久 | 久久国产精品久久久久久久久久 | 久在线视频| 欧美最爽乱淫视频免 | 草草浮力影视 | 亚洲精品一区中文字幕乱码 | 狠狠色狠色综合曰曰 | 成人三区四区 | 韩国美女激情视频一区二区 | 九九视频只有精品 | 国产九一精品 | 福利二区 | 国产精品无码永久免费888 | 欧美亚洲香蕉 | www.sewang| 亚洲日韩成人 | 亚洲精品一区二区三区福利 | 91中文字幕在线 | 日本一本久道 | 成人在线免费观看 | 久久伦理中文字幕 | 国产三级福利 | 搞av.com | 站长推荐国产午夜免费视频 | www.狠狠艹| a视频免费 | 欧美在线观看一区 | 久久综合九色综合欧美狠狠 | 日韩中文字幕在线视频 | 色噜噜视频 | 一级激情片 | 天天夜天干天天爽 | 久久久久久网站 | 四虎最新免费网址 | 成人精品一区二区三区 | 夜干夜夜 | 亚洲精品在线视频 | 天堂资源地址在线 | 国产野花视频天堂视频免费 |