600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python 获取网页元素_Python爬虫--解析网页中的元素

python 获取网页元素_Python爬虫--解析网页中的元素

时间:2019-11-22 12:55:14

相关推荐

python 获取网页元素_Python爬虫--解析网页中的元素

本次学习目的:

学会筛选所需要的信息。

解析网页的步骤:

1.使用Beautiful解析网页

Soup = BeautifulSoup(html,'lxml')

描述要爬取的东西在哪里

message = Soup.select()

3.从标签中获得你要的信息

1.使用BeautifulSoup解析网页

Soup = BeautifulSoup(html, 'lxml)

这一句代码的意思是,解析一个html文件,使用lxml这个库,在Python中,解析一个网页有多种的库,比如:html.parse、lxml HTML、lxml XML和html5lib等,选择lxml的原因是这个库相对比较快速且稳定性较好。

2.描述要爬取的元素的位置

网页中对应元素的检查,Copy的格式有两种,selector和XPath。

区别如下:

CSS selector:body > div:nth-child(2) > div > div.col-md-9 > div:nth-child(2) > div:nth-child(1) > div > img

XPath:/html/body/div[1]/div/div[2]/div[2]/div[1]/div/img

上面两行代码是一个网页中的同一个元素的selector和XPath,可以看出,XPath单纯的指出了元素所在的位置,selector则同时标出了元素的样式。

3.筛选所需要的信息

筛选所需要的信息,在逻辑处理上进行操作即可完成,增加筛选条件即可。

示例代码:

from bs4 import BeautifulSoup

info = []

with open('index.html','r') as wb_data:

Soup = BeautifulSoup(wb_data,'lxml')

titles = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')

images = Soup.select('body > div > div > div.col-md-9 > div > div > div > img')

prices = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right')

reviews = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')

# 爬取商品的星级评分

stars = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p:nth-of-type(2)')

for title, image, price, review, star in zip(titles, images, prices, reviews, stars):

data = {

'title': title.get_text(),

'iamge': image.get('src'),

'price': price.get_text(),

'review': review.get_text(),

# 对评分进行提取

# 每个星级都有一个class_="glyphicon glyphicon-star"

'star': len(star.find_all("span", class_="glyphicon glyphicon-star"))

}

info.append(data)

for i in info:

if i['star'] > 3:

print i['title'],i['price']

上述代码实现了从一个页面index.html页面爬取到所需要的信息,并对结果进行筛选并打印出来。其中的难点部分是对商品的星级评分进行爬取。

上述代码中,提取标签中的文本信息使用get_text()方法,提取图片信息使用的是get('src'),在星级评分中使用的是find_all()。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。