美文网首页我爱编程
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