python动态爬取网页

本文介绍两种抓取动态加载网页的方法:一是通过分析页面请求找出动态加载内容的请求URL;二是利用Selenium+Phantomjs模拟浏览器行为获取完整源码。这两种方法能够帮助爬虫工程师更有效地抓取动态网页数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得。

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

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

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

1.分析页面请求

键盘F12打开开发者工具,选择Network选项卡,选择JS(除JS选项卡还有可能在XHR选项卡中,当然也可以通过其它抓包工具),如下图

然后,我们来拖动右侧的滚动条,这时就会发现,开发者工具里出现了新的js请求(还挺多的),不过草草翻译一下,很容易就能看出来哪个是取评论的,如下图

 

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

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

这整个页面是一个json格式的数据,对于京东来说,当用户下拉页面时,触发一个js事件,向服务器发送上面的请求取数据,然后通过一定的js逻辑把取到的这些json数据填充到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")

 

转载于:https://www.cnblogs.com/lzhc/p/9069964.html

Python动态爬取是指使用Python编写爬虫程序,并利用Selenium库来控制浏览器进行爬取动态页面的数据。Selenium提供了多种语言的API接口,包括Python,可以方便地实现对动态页面的爬取。通过Selenium的Python API接口,我们可以模拟用户在浏览器中的操作,如点击、输入等,从而获取到动态加载的数据。这种方法可以应对一些不太常规的网页代码,提高爬取数据的灵活性和准确性。\[2\]使用Python动态爬取数据不仅可以综合运用前面学到的Python基础知识,还能提高对细节的洞察能力,使爬虫更加灵活和高效。\[3\] #### 引用[.reference_title] - *1* *3* [基于python爬虫————静态页面和动态页面爬取](https://blog.youkuaiyun.com/qq_52661119/article/details/119854694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python动态网页爬取](https://blog.youkuaiyun.com/xiao1234oaix/article/details/130974055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值