最近在写爬虫的时候发现利用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:无限战争],[遗传厄运],[祈祷落幕时],[燃烧],[摘金奇缘],[致所有我曾爱过的男孩],[]]
在对其中用正则表达式进行切割就好了