1. 程式人生 > >python爬蟲系列(3.8-正則的使用)

python爬蟲系列(3.8-正則的使用)

一、需要系統的學習正則表示式

 

二、在python爬蟲中需要掌握的正則有

1、元字元

1..:除了\n以外的任意字元

2.*:出現0到多次

3.?:出現0或者1次

4.+:表示出現1到多次

2、常用的方法

1.compile:表示生成正則表示式參考地址

2.findall:查詢全部注意返回的是一個列表參考地址

三、使用正則抓取唐詩

import re

import requests

class GuShiWen(object):

    def __init__(self):

        self.url = 'https://www.gushiwen.org/default_2.aspx'

        self.headers = {

            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36',

        }

    def get_html(self):

        """

        抓取古詩文第一頁內容

        :return:

        """

        response = requests.get(url=self.url, headers=self.headers)

        if response.status_code == 200:

            gusiwen_list = []

            params = re.compile('.*?(<div class="sons".*?)<div style="width:1px; height:1px; overflow:hidden;">', re.S)

            article_list = params.findall(response.text)

            for article in article_list:

                gusiwen_dict = {}

                title = re.compile('.*?<b>(.*)</b>', re.S).findall(article)[0]

                content = re.compile('.*?<div class="contson".*?>(.*?)</div>', re.S).findall(article)[0].strip().replace('<br />', '')

                gusiwen_dict['title'] = title

                gusiwen_dict['content'] = content

                gusiwen_list.append(gusiwen_dict)

            print(gusiwen_list)

            return

        print('請求錯誤')

if __name__ == "__main__":

    gusiwen = GuShiWen()

    gusiwen.get_html()

四、在爬蟲中使用正則獲取資料

1、基本上是使用findall方法

2、主要是網頁多行字元要使用re.S

3、如果正則比較複雜的時候使用re.compile()對正則包裝下