仍然以糗事百科 http://www.qiushibaike.com/text/
的段子數(shù)據(jù)抓取來說明祭往。
結構化數(shù)據(jù)挡爵,就是對應一個數(shù)據(jù)塊荡含,編程中的一個對象咒唆,數(shù)據(jù)庫中的一條記錄。
結構化數(shù)據(jù)抓取的原則内颗,循環(huán)點要放在包含整塊數(shù)據(jù)標簽處。即『先取大再取小』敦腔。
抓取數(shù)據(jù)字段:
- 段子作者
- 段子內容
- 好笑數(shù)
- 評論數(shù)
選取的循環(huán)點放在這個div
上均澳,使用class
屬性,不要使用id
<div class="article block untagged mb15" id='qiushi_tag_118966710'>
直接上代碼。大家重點掌握 XPath?的方法找前。bs4的selector糟袁,還是 XPath,都是用Chrome工具來 copy 躺盛,再根據(jù)網(wǎng)頁結構作一些調整项戴。
一、使用BeautifulSoup
# coding=utf-8
import requests
from bs4 import BeautifulSoup
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
headers={"User-Agent":user_agent} #請求頭,headers是一個字典類型
html = requests.get('http://www.qiushibaike.com/text/',headers=headers).content
soup = BeautifulSoup(html,'lxml')
#注意以下注釋的是不同的方法或定位槽惫,都可以
#divs = soup.find_all('div',class_="article block untagged mb15")
#divs = soup.select('div .article.block.untagged.mb15') # 注意這里 class屬性中有空格周叮,都轉為.
divs = soup.select('div.col1 > div') # 這里是用從一層標簽開始定位的。
for div in divs:
author = div.select('div > a > img')
if author :
print author[0]['alt']
content = div.select('a > div > span')[0].text
print content
funny = div.select('div.stats > span.stats-vote > i')[0].text
print funny
comment = div.select('div.stats > span.stats-comments > a > i')[0].text
print comment
二界斜、使用XPath
# coding=utf-8
import requests
from lxml import etree
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
headers={"User-Agent":user_agent} #請求頭,headers是一個字典類型
html = requests.get('http://www.qiushibaike.com/text/',headers=headers).content
selector = etree.HTML(html)
divs = selector.xpath('//div[@class="article block untagged mb15"]')
for div in divs:
author = div.xpath('div[1]/a[2]/@title')
print author[0]
content = div.xpath('a[1]/div/span/text()[1]')
print content[0]
funny = div.xpath('div[2]/span[1]/i/text()')
print funny[0]
comment = div.xpath('div[2]/span[2]/a/i/text()')
print comment[0]
以上數(shù)據(jù)只作了打印顯示仿耽。