python爬取糗事百科

sixkery發表於2018-08-14

閒來無事,找點段子一樂呵,就逛到糗事百科,這次爬取沒有什麼難度,唯一值得說道的是增加了一點點的程式碼健壯性。

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(`
`,``))
            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()
  • 其中類裡的方法是私有方法,外部不可呼叫。
  • 解析網頁部分增加了判斷獲取欄位為空的處理方法。
  • 歡迎大家跟我交流學習。


相關文章