js 抓取网页内容(网页模块化的开发,完成js的渲染完成解析)

优采云 发布时间: 2021-09-24 10:48

  js 抓取网页内容(网页模块化的开发,完成js的渲染完成解析)

  由于web页面的模块化开发,很多web页面的信息加载都是通过JS完成的。仅仅通过解析静态网页来完成需求是不可能的。本文通过phantomjs完成JS的渲染,然后通过前一篇文章中介绍的beautiful soup完成解析

  首先,安装phantomjs并阅读官方网站文档。因为JS需要一个浏览器来运行,所以它还需要一个没有接口的浏览器内核工具:Selenium和Firefox驱动程序Ecko驱动程序

  为了详细介绍,本文使用以下需求作为开发任务:

  抓取百度图片,在关键词“她”之后输入页面显示的图片,如图所示:

  

  她喜欢照片

  通过查看网页源代码,我们可以发现这个页面是通过使用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()

  抓取结果示例:

  

  她喜欢照片

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线