欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 亚洲精品欧美一区二区三区 | 在线国产一区二区 | 亚洲精品第一国产综合野 | 国产嘿咻 | 国产精品久久久久久免费 | 精品三级国产精品经典三 | 欧美系列在线播放 | 欧美 日韩 中文 | 久久久久久久综合日本亚洲 | 国产成人精品日本亚洲11 | 好骚综合97op | 久久国产精品99久久久久久牛牛 | 日韩欧美专区 | 久久久久久国产精品免费免费狐狸 | 亚洲youjizz| 日韩欧美在线视频不卡免费视频 | 亚洲欧美成人综合在线 | 久久精品视频在线播放 | 成人在线免费观看 | 久久网在线 | 99精品国产高清在线观看 | 一区二区三区欧美大片 | 国产精品久久久久久久7电影 | 亚洲午夜精品国产电影在线观看 | 亚洲欧美bt | 亚洲自拍偷拍在线 | 久久亚洲精品中文字幕二区 | 亚洲日本一区二区三区 | 久久se精品一区精品二区 | 一本一道久久综合狠狠老 | 久久草在线视频 | 欧美激情久久久久久久久 | 精品黑人一区二区三区 | 精品伊人久久久 | 精品一区二区电影 | 成人精品 | 黑人群姣中国妞在线观看 | 一区二区三区视频免费观看 | 亚洲精品一区二区三区99 | 午夜影院网站 | 日韩免费一区二区三区 |