Python 利用爬蟲爬取網頁內容 (div節點的疑惑)

最近在寫爬蟲的時候發現利用beautifulsoup解析網頁htmlhtml

利用解析結果片斷爲:正則表達式

<td valign="top">
<div class="pl2">
<a class="" href="https://movie.douban.com/subject/26588308/">
死侍2
/ <span style="font-size:13px;">DP2</span>
</a>
<p class="pl">2018-05-18(美國) / 瑞恩·雷諾茲 / 喬什·布洛林 / 莫蕾娜·巴卡林 / 朱利安·迪尼森 / 莎姬·貝茲 / T·J·米勒 / 萊斯利·格塞斯 / 卡蘭·索尼 / 布里安娜·希德布蘭德 / 傑克·凱西 / 埃迪·馬森 / 忽那汐裏 / 斯蒂芬·卡皮契奇 / 蘭德爾·瑞德...</p>
<div class="star clearfix">
<span class="allstar40"></span>
<span class="rating_nums">7.5</span>
<span class="pl">(94247人評價)</span>app

 

我要抓取的是評分,也就是上文中:<span class="rating_nums">7.5</span>ui

利用find_all('節點‘,class_='目標class')編碼

在以前抓取的時候,常常將「」這個符號也寫入目標class中,而且認爲要加入轉義符號r‘’以去消除轉義url

但常常返回的是空字符串spa

以後看到了其餘博客後發現,不用加入「」也能夠(如果加入「」後應該注意r''的使用)code

源代碼爲:orm

import re
import requests
from bs4 import BeautifulSoup

def get_HTML(url):
    header = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Mobile Safari/537.36"}
    try:
        r = requests.get(url,timeout = 30,headers=header)
        r.raise_for_status()
        r.encoding = r.apparent_encoding   #指定編碼形式
        return r.text
    except:
        return "please inspect your url or setup"

#解析目標網頁的html

def get_information_from_url(url):
    text = get_HTML(url)
    soup = BeautifulSoup(text,"html.parser")#解析text中的HTML
    print(soup)
    dls = soup.find_all('tr', class_=r''"item"'')
    marks = soup.find_all('span',class_='rating_nums')
    #print(dls)
    print(marks)
    f = []
    for x in dls:
        rel = '>\\n +'+'[\s\S]*?'+'/ <'#正則表達式
        pattern = re.compile(rel)
        fname =pattern.findall(str(x))
        f.append(fname)
    f = str(f)
    #print(f)
    fname = f.replace(' ','')
    fname = fname.replace('\\n','')
    fname = fname.replace('\'>','')
    fname = fname.replace('/<\'','')
    #print(fname)
    
        
        
url = "https://movie.douban.com/chart"
get_information_from_url(url)   

 

運行結果爲:htm

[<span class="rating_nums">7.5</span>, <span class="rating_nums">6.8</span>, <span class="rating_nums">8.1</span>, <span class="rating_nums">8.2</span>, <span class="rating_nums">7.3</span>, <span class="rating_nums">8.2</span>, <span class="rating_nums">7.9</span>, <span class="rating_nums">7.0</span>, <span class="rating_nums">7.2</span>, <span class="rating_nums">7.1</span>]
[[死侍2],[瞞天過海:美人計],[升級],[復仇者聯盟3:無限戰爭],[遺傳厄運],[祈禱落幕時],[燃燒],[摘金奇緣],[致全部我曾愛過的男孩],[]]

在對其中用正則表達式進行切割就行了

相關文章
相關標籤/搜索