春雨醫生問答實例的爬取

春雨醫生問答實例爬蟲

好久不更博~

九月中旬過去了 不管怎樣 我比賽也都結束了 是時候豐富自己一波了 我說了今搞出來爬蟲的 gan起來

那麼首先是html文檔的獲取

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return " "

接下來不管我們怎樣解析這個html文檔結構 解析完了最重要的是我們獲得我們想要的內容 最重要的是正則表達式
首先正則語法 正則語法
正則語法
最全正則
然後就是怎麼應用啦
Python通過re模塊提供對正則表達式的支持。使用re的一般步驟是先使用re.compile()函數,將正則表達式的字符串形式編譯爲Pattern實例,然後使用Pattern實例處理文本並獲得匹配結果(一個Match實例),最後使用Match實例獲得信息,進行其他的操作。
舉一個簡單的例子,在尋找一個字符串中所有的英文字符:

import re
pattern = re.compile('[a-zA-Z]')
result = pattern.findall('as3SiOPdj#@23awe')
print result
# ['a', 's', 'S', 'i', 'O', 'P', 'd', 'j', 'a', 'w', 'e']

那麼就爬一波春雨醫生
我們觀察一波網頁源碼
question在文檔中的情況
answer在文檔中的情況
可以看到問答都在i標籤中
所以 分別可以這樣獲取
重要的就是這裏
QAQ

re_wen=re.compile(r'(?<=<i class="ask-tag">)[\s\S]*?(?=</a>)')
    re_da=re.compile(r'(?<=<div class="qa-item qa-item-answer">)[\s\S]*?(?=</div>)')

然後就沒了
上代碼

#coding:utf-8
import requests
from bs4 import BeautifulSoup
import bs4
import re
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return " "
def main():
    depth = 10
    start_url = 'http://www.chunyuyisheng.com/pc/search/qalist/?query=%E6%8A%91%E9%83%81 '
    infoList = []
    re_wen = re.compile(r'(?<=<i class="ask-tag">)[\s\S]*?(?=</a>)')
    re_da = re.compile(r'(?<=<div class="qa-item qa-item-answer">)[\s\S]*?(?=</div>)')
    for i in range(1, depth):
        url = start_url + '&page=' + str(i)
        html = getHTMLText(url)
        result_a=re_wen.findall(html)
        result_b=re_da.findall(html)
        for i in range (len(result_a)):
            result_a[i]=result_a[i].replace(" ","").replace(r"</i>",':').replace("\n",'').replace("\t",'')
        for i in range(len(result_b)):
            result_b[i] = result_b[i].replace('<i class="ask-tag answer-tag">', "--").replace("<span class='s-hl'>", '').replace("</span>", "").replace("\t", '').replace(" ","\n")
        for i in range(len(result_b)):
            print(str(i)+":"+result_a[i]+result_b[i])
main()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章