Python 利用爬虫爬取网页内容 (div节点的疑惑)

最近在写爬虫的时候发现利用beautifulsoup解析网页html

利用解析结果片段为:

<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>

 

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

利用find_all('节点‘,class_='目标class')

在之前抓取的时候,经常将“”这个符号也写入目标class中,并且认为要加入转义符号r‘’以去消除转义

但经常返回的是空字符串

之后看到了其他博客后发现,不用加入“”也可以(若是加入“”后应该注意r''的使用)

源代码为:

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)   

 

运行结果为:

[<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:无限战争],[遗传厄运],[祈祷落幕时],[燃烧],[摘金奇缘],[致所有我曾爱过的男孩],[]]

在对其中用正则表达式进行切割就好了

 

posted on 2018-08-29 19:13  MannerMaktheMan  阅读(10691)  评论(0编辑  收藏  举报

导航