Python爬蟲教程(16行代碼爬百度)


最近在學習python,不過有一個正則表達式一直搞不懂,自己直接使用最笨的方法寫出了一個百度爬蟲,只有短短16行代碼。
首先安裝必背包:

pip3 install bs4 pip3 install requests

安裝好后,輸入

import requests from bs4 import BeautifulSoup

F5運行如果不報錯則說明安裝成功。
打開瀏覽器,輸入'www.baidu.com',即進入百度,隨便搜索什么,我這里用'python'為例
可以發現,百度搜索出來的鏈接為

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=python****

最后可以簡化為:

https://www.baidu.com/s?wd=python

所以首先嘗試獲取搜索結果的html:

import requests from bs4 import BeautifulSoup url='https://www.baidu.com/s?wd='+'python' headers = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.16 Safari/537.36"} html = requests.get(url,headers=headers).text print(html)

然后,我們再從HTML里面找出我們想要的
注意這些廣告

可以看爬下來的數據也可以使用谷歌瀏覽器的F12
這里已谷歌的F12為例
class不同,這個可以作為分析方法
可以發現,div標簽中

 

  • class為'result c-container '的為非百度,非廣告的內容(我們需要的內容)
  • class為'result-op c-container xpath-log'的為百度自家的內容(可以按需篩選)
  • class為其它的都為廣告

首先定義篩選

soup = BeautifulSoup(html, 'html.parser')

使用for循環找出所有div標簽,且class為'result c-container'

for div in soup.find_all('div',class_="result c-container"): print(div)

讓后再次使用for循環在其中找出h3標簽

for div in soup.find_all('div',class_="result c-container"): #print(div)注釋掉方便檢查代碼 for h3 in div.find_all('h3'): print(h3.text)

再次尋找出標題和鏈接(a標簽)

for div in soup.find_all('div',class_="result c-container"): #print(div) for h3 in div.find_all('h3'): #print(h3.text) for a in h3.find_all('a'): print(a.text,' url:',a['href'])

這樣,我們就成功屏蔽了廣告、百度百科等等
整體代碼如下:

import requests from bs4 import BeautifulSoup url='https://www.baidu.com/s?wd='+'python' headers = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.16 Safari/537.36"} html = requests.get(url,headers=headers).text print(html) soup = BeautifulSoup(html, 'html.parser') for div in soup.find_all('div',class_="result c-container"): #print(div) for h3 in div.find_all('h3'): #print(h3.text) for a in h3.find_all('a'): print(a.text,' url:',a['href']) #with open(r'C:/爬蟲/百度.txt', 'w', encoding='utf-8') as wr:#如果需要將爬下來的內容寫入文檔,可以加上這兩句 # wr.write(page) 

 

順便說一句,里面的headers是為了隱藏爬蟲身份,雖然訪問量大的話沒用,但不用的話百度直接可以發現你是爬蟲從而直接封你的IP,這樣會搞得你每次上百度都要輸驗證碼
版權屬於:DYblog
請聯系並同意后轉載!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM