js 抓取网页内容(模拟打开浏览器的方法模拟点击网页发现这部分代码确实没有 )
优采云 发布时间: 2022-03-25 08:12js 抓取网页内容(模拟打开浏览器的方法模拟点击网页发现这部分代码确实没有
)
在上一篇文章文章()中,我们使用了模拟打开浏览器的方法,在网页中模拟点击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只需要通过查询参数获取