Python 利用爬虫爬取网页内容 (div节点的疑惑)
最近在写爬虫的时候发现利用beautifulsoup解析网页html
利用解析结果片段为:
2018-05-18(美国) / 瑞恩·雷诺兹 / 乔什·布洛林 / 莫蕾娜·巴卡林 / 朱利安·迪尼森 / 莎姬·贝兹 / T·J·米勒 / 莱斯利·格塞斯 / 卡兰·索尼 / 布里安娜·希德布兰德 / 杰克·凯西 / 埃迪·马森 / 忽那汐里 / 斯蒂芬·卡皮契奇 / 兰德尔·瑞德...
我要抓取的是评分,也就是上文中:7.5
利用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)
复制代码
运行结果为:
[7.5, 6.8, 8.1, 8.2, 7.3, 8.2, 7.9, 7.0, 7.2, 7.1]
[[死侍2],[瞒天过海:美人计],[升级],[复仇者联盟3:无限战争],[遗传厄运],[祈祷落幕时],[燃烧],[摘金奇缘],[致所有我曾爱过的男孩],[]]
在对其中用正则表达式进行切割就好了