python - 在 Python 中使用 selenium 抓取动态(AJAX)网站
问题描述
我有一个基于 AJAX 的网站https://stackshare.io/application_and_data。我正在尝试在所有页面上抓取技术堆栈的徽标。我使用 selenium 来 find_element_by_class - 它返回一个空列表。在 XHR 请求中找到的 JQuery 没有我可以使用的 URL。对 jQuery 脚本进行逆向工程所需的帮助。
我在网络数据中找到的其他 URL 似乎也失败了。我尝试邮递员复制请求,但无法正确执行。
很感谢任何形式的帮助。
import time
import requests
from bs4 import BeautifulSoup
import urlparse
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Firefox(executable_path="/home/Documents/geckodriver")
driver.get("https://stackshare.io/application_and_data/")
content = driver.find_elements_by_class_name("btn btn-ss-alt btn-lg load-more-layer-stacks")
content_1 = driver.find_elements_by_class_name("div-center hidden-xs")
Content 和 content_1 给出一个空列表。我该如何继续,或者我在这里做错了什么?
以下是我尝试的逆向工程方法。
request_url = 'https://stackshare.io/application_and_data/load-more'
request_headers = {
'Accept' : '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language' : 'en-GB,en;q=0.5',
'Connection' : 'keep-alive',
'Content-Length' : '128',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'cookie' :'_stackshare_production_session=cUNIOVlrV0h2dStCandILzJDWmVReGRlaWI1SjJHOWpYdDlEK3BzY2JEWjF3Lzd6Z0F6Zmg1RjUzNGo0U1dPNFg2WHdueDl5VEhCSHVtS2JiaVdNN0FvRWJMV0pBS0ZaZ0RWYW14bFFBcm1OaDV6RUptZlJMZ29TQlNOK1pKOFZ3NTVLbEdmdjFhQnRLZDl1d29rSHVnPT0tLWFzQlcrcy9iQndBNW15c0lHVHlJNkE9PQ%3D%3D--b0c41a10e8b0cf8cd020f7b07d6507894e50a9c5; ajs_user_id=null; ajs_group_id=null; ajs_anonymous_id=%224cf45ffc-a1ab-4048-94ba-d8c58063df95%22; wooTracker=Psbca0UX84Do; _ga=GA1.2.877065752.1528363377; amplitude_id_63407ddf709a227ea844317f20f7b56estackshare.io=eyJkZXZpY2VJZCI6IjcwYmNiMGQ3LTM1MjAtNDgzZi1iNWNlLTdmMTIzYzQxZGEyMVIiLCJ1c2VySWQiOm51bGwsIm9wdE91dCI6ZmFsc2UsInNlc3Npb25JZCI6MTUyODgwNTg2ODQ0NiwibGFzdEV2ZW50VGltZSI6MTUyODgwNjc0Nzk2OSwiZXZlbnRJZCI6ODUsImlkZW50aWZ5SWQiOjUsInNlcXVlbmNlTnVtYmVyIjo5MH0=; uvts=7an3MMNHYn0XBZYF; __atuvc=3%7C23; _gid=GA1.2.685188865.1528724539; amplitude_idundefinedstackshare.io=eyJvcHRPdXQiOmZhbHNlLCJzZXNzaW9uSWQiOm51bGwsImxhc3RFdmVudFRpbWUiOm51bGwsImV2ZW50SWQiOjAsImlkZW50aWZ5SWQiOjAsInNlcXVlbmNlTnVtYmVyIjowfQ==; _gat=1; _gali=wrap',
'Host' :'stackshare.io',
'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0',
'Referer' :'https://stackshare.io/application_and_data',
'X-CSRF-Token' : 'OEhhwcDju+WcpweukjB09hDFPDhwqX…nm+4fAgbMceRxnCz7gg4g//jDEg==',
'X-Requested-With' : 'XMLHttpRequest'
}
payload = {}
response = requests.post(request_url, data=payload, headers=request_headers)
print response
观察:我收到了 499 响应代码。我需要提供什么有效载荷?我检查了 XHR 请求,但找不到正确的 URL,它导致。
解决方案
推荐阅读
- r - 如何使用 Purrr 将因子的级别作为参数传递给函数
- javascript - 在页面加载和单选输入点击上运行 jQuery 函数
- node.js - 如何在 React 上使用 Material Ui。收到错误无效的挂钩调用
- javascript - 信封:无法读取sails.js 中未定义的属性“id”
- angular - 增加垫表角度中垫子行之间的间隙
- data-science - 使用 ARIMA 进行多特征预测
- javascript - 发生未处理的异常:在 Angular 9 的构建产品上超出了调用重试次数
- c - remove() 返回文件未找到错误(errno = 2),当我之前使用相同的文件字符串打开文件时
- amazon-web-services - AWS ECS 部署:内存不足
- .net - ORA-08103: .net 中不再存在对象