js 抓取网页内容(模拟打开浏览器的方法模拟点击网页发现这部分代码确实没有 )

优采云 发布时间: 2022-03-25 08:12

  js 抓取网页内容(模拟打开浏览器的方法模拟点击网页发现这部分代码确实没有

)

  在上一篇文章文章()中,我们使用了模拟打开浏览器的方法,在网页中模拟点击load more来动态加载网页并获取网页内容。但是很遗憾,网站的部分内容是使用js动态加载的。我们用普通方法获取的时候发现有些地方是空白的,所以无法获取Xpath,所以上一篇文章方法也失败了。

  可能有的童鞋开始觉得代码不对,然后把网页的所有内容都打印出来,发现自己想要的那部分内容真的少了,然后用浏览器访问网页,右键查看网页的源代码,发现这部分代码是真的少了。我就是那个傻孩子!!!

  所以本文文章希望能解决这类问题,抓取js动态加载的网页。首先想到的是使用selenium调用浏览器进行爬取,但是第一句话显示无法获取Xpath,所以无法通过点击页面元素来实现。这时候看到了这个文章(),使用selenium+phantomjs进行无界面捕获。

  具体步骤如下:

  1. 下载Phantomjs,下载地址:

  2. 下载后直接解压就OK了,然后用pip安装selenium

  3. 编写代码并执行

  完整代码如下:

  import requests

from bs4 import BeautifulSoup

import re

from selenium import webdriver

import time

def getHTMLText(url):

driver = webdriver.PhantomJS(executable_path='D:\\phantomjs-2.1.1-windows\\bin\\phantomjs') # phantomjs的绝对路径

time.sleep(2)

driver.get(url) # 获取网页

time.sleep(2)

return driver.page_source

def fillUnivlist(html):

soup = BeautifulSoup(html, 'html.parser') # 用HTML解析网址

tag = soup.find_all('div', attrs={'class': 'listInfo'})

print(str(tag[0]))

return 0

def main():

url = 'http://sports.qq.com/articleList/rolls/' #要访问的网址

html = getHTMLText(url) #获取HTML

fillUnivlist(html)

if __name__ == '__main__':

main()

  那么对于js动态加载,可以使用Python来模拟请求(一般是获取请求,添加请求头)。

  具体方法是先按F12,打开网页评论元素界面,点击网络,如下图:

  

  排除图片、gif、css等。要找到你想要的网页,你只要尝试打开一个新的浏览器访问上面的url,就可以看到页面信息,如果是你想要的信息,使用request get方法,只需完成headers

  

  请求的 url 通常很长。例如上图的url地址为:

  其实只要保留rowguid,也就是访问:

  那么rowguid只需要通过查询参数获取

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线