python四周实战1.02——BeautifulSoup

wow!! beautiful soup!

这次的练习是爬取本地网页,但是在刚开始使用beautifulsoup的时候就给了我一个老大的难题,没安装lxml库,按照课前预习的安装了也安装失败,后来还是在知乎找到了解决方法,呃,虽然好像不是那么程序猿,但是能抓到老鼠就是好猫了。和群里老师私聊说是第一周直播的时候有讲过这个问题,看来不能光看课程,还是得回去再看一遍直播去。
下面是代码,后来发现跟答案的selector路径不是很一样,还得再细细琢磨一下,我的删的太过分了,好在这个网页比较简单没出错。

from bs4 import BeautifulSoup

with open('./index.html','r')as wb_data:
    soup=BeautifulSoup(wb_data,'lxml')

    images = soup.select('body > div > div > div > div > div > div > img')
    titles = soup.select('body > div > div > div > div > div > div > div > h4 > a')
    prices = soup.select('body > div > div > div > div > div > div > div > h4.pull-right')
    stars  = soup.select('body > div > div > div > div > div > div > div > p:nth-of-type(2)')
    views  = soup.select('body > div > div > div > div > div > div > div > p.pull-right')

for title,image,star,view,price in zip(titles,images,stars,views,prices):
    data = {
        'title':title.get_text(),
        'price':price.get_text(),
        'star' :len(star.find_all('span','glyphicon-star')),
        'view' :view.get_text(),
        'image':image.get('src')
    }

    print(data)

这是下载的CSS selector路径:

    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")
    reviews = soup.select("body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right")
    prices = soup.select("body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right")
    stars = soup.select("div > div.ratings > p:nth-of-type(2)")

总结:

  1. 基本的安装库还得回去再看看直播,打造最合适的python环境有助于提高效率。

  2. CSS selector的路径选择怎么样比较科学和合理还得再研究。

    1.BeautifulSoup不支持nth-child语法

  3. 另外是对于文件路径的设置:

相对路径,确保index.html和main.py在同一个文件夹
相对路径可以方便代码拷贝,移动到其他文件夹不需要修改代码
path = './index.html'

设置一个path变量保存路径是很聪明的做法。

4.find_all()用来筛选挺好用的,不过没想到用len()函数统计★个数,借鉴了一下答案。思路还是不够开阔和专业。

5.用with语法来open文件,不用close()函数。

  with open(‘文件地址’,‘r’) as wb_data:
      content=wb_data.read()

6.利用zip函数,for遍历得到的列表,取得每一项信息。

附上解决lxml无法安装的解决方法:
python四周实战1.02——BeautifulSoup_第1张图片
Paste_Image.png

你可能感兴趣的:(python四周实战1.02——BeautifulSoup)