您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用BeautifulSoup爬取網頁內容”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用BeautifulSoup爬取網頁內容”吧!
最近要做一個食品安全方面的項目,需要爬取新聞。于是想到之前用BeautifulSoup爬蟲還是非常方便的,今天正好試了一下,可行。
爬取的鏈接如下:http://news.sohu.com/1/0903/61/subject212846158.shtml
結構如下:
從第二頁開始的鏈接格式是:http://news.sohu.com/1/0903/61/subject212846158_1091.shtml
逐頁遞減(即1091、1090如此)。
需要的內容: 標題、時間、來源、作者、全文。
準備: urllib2, BeautifulSoup, lxml
先引入這幾個庫
import urllib2
import lxml
from bs4 import BeautifulSoup
先用開發者工具得到headers(當然我們這里不用headers也可以)
headers = {
"User-Agent": "ozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}
def sina_news(url,i): request = urllib2.Request(url,headers=headers) #發送請求,帶headers response = urllib2.urlopen(request) #得到response html_doc = response.read() #讀取得到HTML文件 soup = BeautifulSoup(html_doc,'lxml') #對HTML使用lxml解析器進行解析 titles = soup.select('td.newsblue1 > a:nth-of-type('+str(i)+')') #利用selector獲得titles time = soup.select('td.newsblue1 > span:nth-of-type('+str(i)+')') #同上 print titles[0].get_text() #由于select返回的是表,表的第一個元素是我們要的,所以titles[0],.get_text()是為了去掉一些HTML代碼,只得到內容值 print time[0].get_text() print titles[0]['href']
利用selector進行解析的時候是用到了開發者工具的定位功能,定位元素后,右鍵copy-selector即可,當然要注意nth-child(x)需要改成nth-of-type(x),在這里我們用了
nth-of-type('+str(i)+')')
這樣的表達方式,是因為在該頁面的結構中,新聞是以子項目排列的。如第一條就是nth-of-type(1),第二條就是nth-of-type(2),如此列推。測試一下結果:
for i in range(1,201):
sina_news('http://news.sohu.com/1/0903/61/subject212846158.shtml',i)
結果如下:
現在僅僅是解決了標題、時間、鏈接,我們還有來源,作者。但是我們已經獲得了每一條新聞的鏈接,那么這就很好辦了。
我們先看一下每一條新聞的結構:
同理、很容易就能提取出來源、責任編輯。代碼如下:
def get_source(url):
request = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(request)
html_doc = response.read()
soup = BeautifulSoup(html_doc,'lxml')
sources = soup.select('#media_span')
editor = soup.select('#editor_baidu')
return sources,editor
在原來的函數中增加如下代碼:
sources,editor = get_source(titles[0]['href'])if(sources):
print sources[0].get_text()
if(editor):
print editor[0].get_text()
由于來源和責任編輯不一定每一條新聞都有,因此這里加了一個判斷條件。現在看看效果。
效果還可以,再提取所有頁面的內容
def get_singalpage_all(url):
for i in range(1,201):
sina_news(url,i)
def get_all_page():
url = 'http://news.sohu.com/1/0903/61/subject212846158'
for i in range (1091,990,-1):
wholeURL = url + '_' + str(i) + '.shtml'
get_singalpage_all(wholeURL)
調用一下:
get_singalpage_all('http://news.sohu.com/1/0903/61/subject212846158.shtml')
get_all_page()
成功爬取了所有國內要聞。
上面已經是全部源代碼了,當然如果你覺得這樣看很麻煩的話,可以在這里下載:
https://alltoshare.com/product/2747.html
感謝各位的閱讀,以上就是“怎么用BeautifulSoup爬取網頁內容”的內容了,經過本文的學習后,相信大家對怎么用BeautifulSoup爬取網頁內容這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。