閑來無事,找點段子一樂呵,就逛到糗事百科,這次爬取沒有什麼難度,唯一值得說道的是增加了一點點的代碼健壯性。
import requests
from lxml import etree
class Spider():
def __get_page(self,url,headers):
try:
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
else:
return None
except Exception:
return None
def __parse_page(self,html):
results = []
data = etree.HTML(html)
items = data.xpath('//div[@id="content-left"]/div')
for item in items:
#擷取作者
author = item.xpath('./div[1]/a[2]/h2/text()')
if author:
results.append(author[0].strip())
else:
results.append('匿名使用者')
#擷取内容
content = item.xpath('./a[1]/div/span/text()')
if content:
results.append(''.join(content).replace('\n',''))
else:
results.append('此使用者沒有内容')
#擷取好笑數
number = item.xpath('./div[2]/span[1]/i/text()')
if number:
results.append(number[0])
else:
results.append('0')
return results
def __save_to_txt(self,data):
with open('data.txt','w',encoding='utf-8') as f:
f.write(data)
def run(self):
for i in range(1,13):
url ='https://www.qiushibaike.com/text/page/' + str(i)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'
' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
html = self.get_page(url,headers)
result = self.parse_page(html)
self.save_to_txt(str(result))
#執行個體化類
spider = Spider()
spider.run()
- 其中類裡的方法是私有方法,外部不可調用。
- 解析網頁部分增加了判斷擷取字段為空的處理方法。
- 歡迎大家跟我交流學習。