最近在写爬虫的时候发现利用beautifulsoup解析网页html
利用解析结果片段为:
死侍2
/ DP2
2018-05-18(美国) / 瑞恩·雷诺兹 / 乔什·布洛林 / 莫蕾娜·巴卡林 / 朱利安·迪尼森 / 莎姬·贝兹 / T·J·米勒 / 莱斯利·格塞斯 / 卡兰·索尼 / 布里安娜·希德布兰德 / 杰克·凯西 / 埃迪·马森 / 忽那汐里 / 斯蒂芬·卡皮契奇 / 兰德尔·瑞德...
(94247人评价)
我要抓取的是评分,也就是上文中:
利用find_all('节点‘,class_='目标class')
在之前抓取的时候,经常将“”这个符号也写入目标class中,并且认为要加入转义符号r‘’以去消除转义
但经常返回的是空字符串
之后看到了其他博客后发现,不用加入“”也可以(若是加入“”后应该注意r''的使用)
源代码为:
importreimportrequestsfrom bs4 importBeautifulSoupdefget_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 #指定编码形式
returnr.textexcept:return "please inspect your url or setup"
#解析目标网页的html
defget_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 indls:
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('/
url= "https://movie.douban.com/chart"get_information_from_url(url)
运行结果为:
[
, , , , , , , , , ][[死侍2],[瞒天过海:美人计],[升级],[复仇者联盟3:无限战争],[遗传厄运],[祈祷落幕时],[燃烧],[摘金奇缘],[致所有我曾爱过的男孩],[]]
在对其中用正则表达式进行切割就好了