java爬虫抓取动态网页(一种爬虫获取动态网页源码的方式你get到了吗?)

优采云 发布时间: 2022-03-19 19:13

  java爬虫抓取动态网页(一种爬虫获取动态网页源码的方式你get到了吗?)

  今天给大家普及下爬虫获取动态网页源码的方法。

  众所周知,如果爬虫请求静态网页,它可以直接获取该网页的源代码。但是如果请求的是动态网页,比如js加载等,那么直接请求是无法获取网页源代码的。

  那么在这种情况下该怎么办呢?有些学生可能已经考虑过使用硒。Selenium 是一个模拟人为操作网页的神器,可以达到可见、可爬的效果。唯一的缺点是速度慢,消耗大量资源。如果整个过程都用硒来操作,会费时费力,那么有没有更好的办法呢?

  如果我只是使用 selenimu 加载网页,在加载完网页并获取网页的源代码后,我会关闭 selenium 并使用 BeautifulSoup 来解析网页的内容。这可能吗?答案是肯定的,这种方法完美的实现了既可以获取网页的源代码,又可以避免整个过程中使用selenium。

  接下来,我以*敏*感*词*网站为例。我们想在下一页上获得第一部*敏*感*词*的名称和链接。

  

  如果我们使用普通请求请求网站,流程如下:

  import time

import requests

from bs4 import BeautifulSoup

import hashlib

from selenium import webdriver

import os

headers = {'X-Requested-With': 'XMLHttpRequest','User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

url = 'http://manhua.dmzj.com/tags/search.shtml?s=%E6%8B%B3%E7%9A%87'

res = requests.get(url, headers=headers)

res = res.text

soup = BeautifulSoup(res, "html.parser")

a = soup.select('div.tcaricature_block.tcaricature_block2 ul>li:first-child a')[0]

title = a['title']

url2 = 'http:' + a['href']

print(url2)

print(title)

  结果如下:

  

  可见,*敏*感*词*的名字和链接根本不是我们想要的。其实是因为它的网页是动态加载的,而我们请求的网页源代码不是我们想要的,所以出现定位错误。

  接下来,我们使用 selenium 获取源代码进行试用。程序如下:

  import time

import requests

from bs4 import BeautifulSoup

import hashlib

from selenium import webdriver

import os

path = "/usr/local/chromedriver"

driver = webdriver.Chrome(path)

headers = {'X-Requested-With': 'XMLHttpRequest','User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

url = 'http://manhua.dmzj.com/tags/search.shtml?s=%E6%8B%B3%E7%9A%87'

driver.get(url)

time.sleep(3) #这是为了让网页能够完全加载出来

res = driver.page_source

driver.close()

soup = BeautifulSoup(res, "html.parser")

a = soup.select('div.tcaricature_block.tcaricature_block2 ul>li:first-child a')[0]

title = a['title']

url2 = 'http:' + a['href']

print(url2)

print(title)

  结果如下:

  

  可以看出我们得到了我们想要的*敏*感*词*名和链接,因为用selenium得到的源码和我们在网页上看到的一样。

  你有这种获取网页源代码的方法吗?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线