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

优采云 发布时间: 2021-11-29 06:19

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

)

  在上一篇文章()中,我们使用了模拟打开浏览器的方法来模拟点击网页中的Load More来动态加载网页并获取网页内容。不幸的是,网站 的这部分部分是使用 js 动态加载的。当我们用普通的方法获取的时候,发现有些地方是空白的,所以无法获取到Xpath,所以第一部分文章的方法就会失败。

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

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

  具体步骤如下:

  1. 下载Phantomjs,下载地址:

  2. 下载完成后,直接解压就可以了,然后就可以使用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,打开网页评论元素界面,点击网络,如下图:

  

  排除图片,gifs,css等,如果你想找到你想要的网页,你只需要尝试打开一个新的浏览器访问上面的url,然后你就可以看到页面信息,如果是你想要的信息想要,使用 request Get 方法,只需完全添加标题

  

  请求的 URL 通常很长。比如上图的URL地址是:

  其实只需要保留rowguid,即只需要访问:

  那么rowguid只需要传入查询参数即可获取

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线