日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python简单爬虫(一)

發(fā)布時(shí)間:2023/12/19 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python简单爬虫(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  學(xué)習(xí)python前糾結(jié)了下,到底是應(yīng)該一個(gè)個(gè)知識(shí)點(diǎn)吃透,然后寫(xiě)些小程序。還是應(yīng)該快速掌握基礎(chǔ)語(yǔ)法,快速實(shí)踐。思考后認(rèn)為前者這么學(xué)習(xí)速度真心不高,于是花2天時(shí)間看了下python3的語(yǔ)法,雖然很多都不明白,但是帶著小項(xiàng)目來(lái)學(xué)習(xí)直接解決問(wèn)題。在項(xiàng)目中遇到問(wèn)題,查閱一點(diǎn)點(diǎn)解決,這樣很靠譜。

  在實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的爬蟲(chóng)前,應(yīng)該知道需要用到哪些東西??

  1.如果發(fā)送一個(gè)http請(qǐng)求,來(lái)抓取網(wǎng)頁(yè)內(nèi)容。

  2.如何方便的解析html的dom節(jié)點(diǎn),如果有像phpquery這樣的工具包就太簡(jiǎn)單了。

  百度了下發(fā)現(xiàn) urlib模塊能解決第一個(gè)問(wèn)題,BeautifulSoup模塊能解決第二個(gè)問(wèn)題

  urlib3模塊簡(jiǎn)單使用  

1 import urllib3 2 3 #請(qǐng)求的地址 4 url = 'https://www.baidu.com/' 5 6 http = urllib3.PoolManager() 7 r = http.request('GET',url) 8 9 print(r.status) #請(qǐng)求狀態(tài)碼 10 print(r.data) #獲取內(nèi)容

  需要注意的是打印出內(nèi)容(r.data)發(fā)現(xiàn)尼瑪, 總是有個(gè)?b' 這樣的東西在字符串最前面。google下發(fā)先大致是說(shuō),python默認(rèn)字符是ascii,但是請(qǐng)求的網(wǎng)頁(yè)編碼是utf8字符的,獲取的內(nèi)容需要轉(zhuǎn)成

utf8字符集然后在輸出,可以這么干。

print(r.data.decode('utf-8'))

  然后重新運(yùn)行發(fā)現(xiàn)大功告成。

  再來(lái)看下BeautifulSoup模塊,其實(shí)挺簡(jiǎn)單的就和jquery操作dom類(lèi)似,具體看文檔即可.

  

1 from bs4 import BeautifulSoup 2 import re #正則 3 4 str = ''' 5 <div class="menu"> 6 <ul class="main-menu"> 7 <li class="first-menu"><a href="/index.php?m=Admin&c=Goods&a=index&typelist=1">品牌商管理</a></li> 8 <li class="first-menu"><a href="javascript:;">商品管理</a></li> 9 <li class="first-menu"><a href="/index.php?m=Admin&c=MyDistribution&a=index">分銷(xiāo)平臺(tái)</a></li> 10 <li class="first-menu"> 11 <a href="javascript:;">消息中心</a> 12 <ul class="sub-menu clearfix"> 13 <li><a href="/index.php?m=Admin&c=News&a=businessNewsList">商家公告</a></li> 14 <li><a href="/index.php?m=Admin&c=Distribution&a=distributionList">申請(qǐng)分銷(xiāo)</a></li> 15 <li><a href="/index.php?m=Admin&c=Message&a=chatMessageList">聊天消息</a></li> 16 <li><a href="/index.php?m=Admin&c=System&a=systemNewsList">系統(tǒng)公告</a></li> 17 </ul> 18 </li> 19 <li class="first-menu"><a href="javascript:;">嗨庫(kù)社區(qū)</a></li> 20 <li class="first-menu"><a href="javascript:;">我的設(shè)置</a></li> 21 </ul> 22 </div> 23 ''' 24 25 soup = BeautifulSoup(str,'html.parser',from_encoding='utf-8') 26 27 print('獲取所有的鏈接') 28 links= soup.find_all('a'); #list 29 for a in links: 30 print(a),print(a['href']) #獲取a標(biāo)簽,和屬性href 31 32 print('獲取href為 /index.php?m=Admin&c=Goods&a=index&typelist=1的url') 33 links = soup.find('a',href="/index.php?m=Admin&c=Goods&a=index&typelist=1") 34 print(links.name,links['href'],links.get_text()) 35 36 37 print('通過(guò)class屬性') 38 links = soup.find('ul',class_='main-menu') 39 print(links) 40 41 print('正則匹配') 42 links = soup.find_all('a',href=re.compile(r"List")) # 加r -> 要轉(zhuǎn)義\只需要寫(xiě)成 \\即可 , 不然要寫(xiě)成\\\ 43 print(links)

  最后結(jié)合2個(gè)模塊來(lái)實(shí)現(xiàn),獲取抓取頁(yè)面的 a標(biāo)簽的href

1 from bs4 import BeautifulSoup 2 import re #正則 3 import urllib.parse 4 import urllib3 5 6 r_url = 'http://baike.baidu.com/link?url=41wW1kkRvhT23i_c6258EtBeBv6Xwtz7gwd3t0q5k-xCs_ipCGRc_ixcCLMail3QtQe4ZRgOK83ek9aHm44QPa' 7 8 #發(fā)送請(qǐng)求獲取內(nèi)容 9 http = urllib3.PoolManager() 10 r = http.request('GET',r_url) 11 12 str = data = r.data.decode('utf-8') 13 14 ''' 15 #挽尊學(xué)習(xí)法,先發(fā)獲取的內(nèi)容生成文件,看下到底是什么 16 f = open('2.html','w') 17 f.write(data.decode('utf-8')) 18 f.close() 19 ''' 20 21 soup = BeautifulSoup(str,'html.parser',from_encoding='utf-8') 22 #通過(guò)正則獲取所有href 為  /view/123/456.htm 這樣的鏈接 23 links = soup.find_all('a',href=re.compile(r'/view/[\d/]+\.htm')) # 加r -> \只需要一個(gè) \轉(zhuǎn)義 , 不然要寫(xiě)成\\\ 24 25 for url in links: 26 new_url = url['href'] 27 ''' 28 將 r_url的域名-> http://baike.baidu.com 29 和 新的url -> /view/123/456.htm 組裝起來(lái) 30 ''' 31 new_full_url = urllib.parse.urljoin(r_url,new_url) #http://baike.baidu.com/view/123/456.htm 32 print(new_full_url)

  參考:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

     http://urllib3.readthedocs.io/en/latest/ 

      

?

總結(jié)

以上是生活随笔為你收集整理的python简单爬虫(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。