Python实战:解析本地网页

要解析的网页:

Python实战:解析本地网页_第1张图片

解析的结果:

Python实战:解析本地网页_第2张图片

我的代码:

from bs4 import BeautifulSoup
with open("C:/Users/张雷/Desktop/必须学的/Plan-for-combating-master/week1/1_2/1_2answer_of_homework/1_2_homework_required/index.html", "r") as wb_data:
Soup = BeautifulSoup(wb_data, 'lxml')

images = Soup.select(" div > div.col-md-9 > div > div > div > img")
titles = Soup.select("div > div.col-md-9 > div > div > div > div.caption > h4 > a")
prices = Soup.select("div > div.col-md-9 > div > div > div > div.caption > h4.pull-right")
descs = Soup.select("div > div.col-md-9 > div > div > div > div.caption > p")
starts = Soup.select("div > div.col-md-9 > div > div > div > div.ratings > p > span")
reviews = Soup.select("div > div.col-md-9 > div > div > div > div.ratings > p.pull-right")

grades = []
while len(starts) !=0:
e = starts[0:5]
grades.insert(1, e)
del starts[0:5]
for image, title, price, desc, grade, review in zip(images, titles, prices, descs, grades, reviews):
start = []
b = str(grade)
c = b.replace('', '★') # 将描述实五角星的替换为图案
d = c.replace('', '☆') # 将描述虚五角星的替换为图案
start.append(d) # 将转化完的结果逐个插入列表star中
data ={
'image': image.get('src'),
'title': title.get_text(),
'price': price.get_text(),
'desc' : desc.get_text(),
'review' : review.get_text(),
'start' : ''.join(start).replace('[', '').replace(']', '').replace(',', '').replace(' ', ''),

}
print(data)

 总结:

1.打开本地网页:

with open("path", "r") as wb_data:
Soup = BeautifulSoup(wb_data, 'lxml')

 这种打开方式不用添加

wb_data.close()

它会自动关闭

2.获取网页的代码:

Soup = BeautifulSoup(wb_data, 'lxml')

3.获得元素路径:

 在网页上,鼠标停留在要解析的元素,右键->检查->在指定的显示灰色的地方右键->点击Copy selector

3.获取标签内的内容:

names = Soup.select("path")

path为步骤3中的获取的路径。print(names)可能为空,因为我们复制回来的selector是浏览器上的selector,我们平时在浏览器上看到的都是经过js脚本的加工,所以selector也是经过加工的。而我们程序爬取到的网页并没有经过浏览器加工,所以所需的selector有可能和浏览器上的不一样,也就是为什么我们会得到一个空列表。

解决办法:

尽量使用较短的selector去定位我们的数据,一般复制回来的selector前半部分可以不要,如果还是没办法准确定位,那再往前加。

4.find_all的用法:

find_all(name, attrs, ...)从所有标签找到标签名字为name,标签属性为attrs的所有标签

例如得到网页上的评分量:

cates = find_all('span', class_='glyphicon glyphicon-star')

你可能感兴趣的:(Python实战:解析本地网页)