美文网首页我爱编程
JS页面信息的抓取

JS页面信息的抓取

作者: Brave1991 | 来源:发表于2017-09-02 14:57 被阅读0次

    由于网页模块化的开发,很多网页的信息加载都是通过js完成的,单纯靠解析静态网页已不能完成需求,本文通过PhantomJS来完成js的渲染,然后通过上一篇介绍的beautifusoup完成解析。
    首先是安装PhantomJS,阅读官网文档。由于js需要浏览器才能运行,所以还需要一个无界面的浏览器内核工具:selenium,以及火狐驱动程序eckodriver
    为详细介绍,本文使用以下需求作为开发任务:
    抓取百度图片输入关键词“ SHE”后页面显示的图片,如图:

    SHE图片.png

    通过查看网页源代码可以发现,此页面采用了js异步加载图片完成,故需要先将js信息渲染完成,然后才能完成解析工作。
    代码如下:

    #coding:utf-8
    from selenium import webdriver
    from bs4 import BeautifulSoup
    
    # browser = webdriver.Firefox(executable_path="/Users/brave/geckodriver/geckodriver")
    browser = webdriver.PhantomJS()
    browser.get("http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=SHE")
    soup = BeautifulSoup(browser.page_source, 'html.parser')
    imgpage = soup.find("div",class_="imgpage")
    list = imgpage.find_all("li",class_="imgitem")
    print(len(list))
    
    for i in range(1,len(list)):
        imagitem = list[i]
        imageURL = imagitem["data-objurl"]
        savePath = "/Users/brave/Documents/python/SHE/" + str(i) +".jpg"
        print(savePath)
        try:
            saveImage(imageURL,savePath)
        except:
            print(imageURL)
    
    browser.quit()
    

    根据图片URL即可下载图片,此处由于简化次要细节默认图片格式为.jpg,代码如下:

    def saveImage(imageURL,savePath):
        # headers = {'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0'}
        # req = urllib.request.Request(url=imageURL, headers=headers)
        # data = urllib.request.urlopen(req).read()
        data = urllib.request.urlopen(imageURL).read()
        fout = open(savePath, "wb")
        fout.write(data)
        fout.close()
    

    抓取结果示例:

    SHE图片.png

    相关文章

      网友评论

        本文标题:JS页面信息的抓取

        本文链接:https://www.haomeiwen.com/subject/suxrjxtx.html