python抓取动态网页(HTML网页时会模拟浏览器行为分析方法分析及注意事项 )

优采云 发布时间: 2022-03-07 09:21

  python抓取动态网页(HTML网页时会模拟浏览器行为分析方法分析及注意事项

)

  介绍

  有时,当我们天真地使用 urllib 库或 Scrapy 下载 HTML 页面时,会发现我们要提取的页面元素不在我们下载的 HTML 中,尽管它们在浏览器中似乎很容易获得。

  这说明我们想要的元素是在我们的一些动作下通过js事件动态生成的。比如我们刷QQ空间或者微博评论的时候,我们一直在往下滑。网页越来越长,内容越来越多。这是人们又爱又恨的动态加载。

  目前爬取动态页面有两种方法

  分析页面请求 selenium 模拟浏览器行为1.分析页面请求

  按键盘F12打开开发者工具,选择Network选项卡,选择JS(除了JS选项卡,也可能在XHR选项卡,当然也可以使用其他抓包工具),如图以下

  

  然后,我们拖动右边的滚动条,然后我们会发现开发者工具里有新的js请求(有不少),但是如果你匆忙翻译的话,很容易看出哪个是评论, 如下所示

  

  OK,复制出js请求的目标url

  

  在浏览器中打开,发现我们要的数据就在这里,如下图

  

  整个页面都是 json 格式的数据。对于京东来说,当用户下拉页面时,会触发一个js事件,将上面的请求发送到服务器去获取数据,然后将获取到的json数据通过一定的js逻辑填充到数据中。在 HTML 页面中。对于我们的 Spider,我们所要做的就是组织和提取这些 json 数据。

  在实际应用中,我们当然不可能在每个页面中找出这个js发起的请求的目标地址,所以需要分析请求地址的规律。一般来说,法律比较容易找到,因为法律对于服务方来说太复杂了。维护也很困难。

  2.Selenium 模拟浏览器行为

  对于动态加载,可以看到 Selenium+Phantomjs 的强大。打开网页查看网页的源代码(注意不是检查元素),你会发现要爬取的信息不在源代码中。也就是说,无法从网页的源代码中解析得到数据。Selenium+Phantomjs 的强大之处之一是它可以捕获完整的源代码以

  示例:根据给定名称搜索豆瓣电影的对应信息

  #-*- coding:utf-8 -*-

import sys

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

from bs4 import BeautifulSoup

reload(sys)

sys.setdefaultencoding(‘utf-8‘)

url = ‘https://movie.douban.com/‘

#这个路径就是你添加到PATH的路径

driver = webdriver.PhantomJS(executable_path=‘C:/Python27/Scripts/phantomjs-2.1.1-windows/bin/phantomjs.exe‘)

driver.get(url)

#在搜索框上模拟输入信息并点击

elem = driver.find_element_by_name("search_text")

elem.send_keys("crazy")

elem.send_keys(Keys.RETURN)

#得到动态加载的网页

data = driver.page_source

soup = BeautifulSoup(data, "lxml")

# 进行匹配

for i in soup.select("div[class=‘item-root‘]"):

name = i.find("a", class_="title-text").text

pic = i.find("img").get(‘src‘)

url = i.find("a").get(‘href‘)

rate = ""

num = ""

if i.find("span", class_="rating_nums") is None:

print name.encode("gbk", "ignore"), pic, url

else:

rate = i.find("span", class_="rating_nums").text

num = i.find("span", class_="pl").text

print name.encode("gbk", "ignore"),pic,url,rate.encode("gbk", "ignore"),num.encode("gbk", "ignore")

  Python动态爬取网页

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线