Python网页抓取?

Python网页抓取?,python,selenium,web-scraping,Python,Selenium,Web Scraping,我正在尝试浏览一个包含纽约股票的网站 每页包含20只股票的信息,共95页。HTML代码只包含前20个的信息。 不知何故,我能够导航到下一页,但我可以检索的股票列表没有更新。 有人能看看我的代码并帮我吗 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.web

我正在尝试浏览一个包含纽约股票的网站

每页包含20只股票的信息,共95页。HTML代码只包含前20个的信息。 不知何故,我能够导航到下一页,但我可以检索的股票列表没有更新。 有人能看看我的代码并帮我吗

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup
import re
import selenium

path_to_phantomjs=r'C:\Users\h.elahi\Desktop\chromedriver' 
driver = webdriver.Chrome(path_to_phantomjs)
web= "https://markets.ft.com/data/indices/tearsheet/constituents?s=NYA:PSE"
driver.get(web)


element=driver.find_element_by_xpath("//li [@data-mod-pagination-
num='3']").click()


WebDriverWait(driver, 30)

text="/data/equities/tearsheet"

level=driver.find_element_by_xpath('//a[contains(@href, "%s")]' % text)
print(level.text)
当您转到“下一页”时,它不会重新加载html页面,而是使用ajax获取内容,通过在切换页面时查看网络包,您可以发现它从这里检索数据:


它看起来是json格式的。

加载数据的最简单方法是直接从AJAX请求加载数据:

在这里,您只需要设置正确的
pagenum

例如:

import requests
import json
from lxml import etree

for i in range(1, 2):
    resp = requests.get('https://markets.ft.com/data/indices/ajax/getindexconstituents?xid=566677&pagenum=%s' % i)
    // print(resp.text)
    j = json.loads(resp.text)
    h = etree.HTML(j['html'])
    print(h.xpath('//a'))
输出:

[<Element a at 0x1024692c8>, <Element a at 0x10239cac8>, <Element a at 0x10237eac8>, <Element a at 0x10239aa08>, <Element a at 0x1024667c8>, <Element a at 0x102466c48>, <Element a a
t 0x102466dc8>, <Element a at 0x102418f08>, <Element a at 0x102418cc8>, <Element a at 0x1024184c8>, <Element a at 0x1023a2bc8>, <Element a at 0x1023a2e88>, <Element a at 0x1023a2fc8
>, <Element a at 0x1023a2dc8>, <Element a at 0x1023a2108>, <Element a at 0x1023a28c8>, <Element a at 0x1023a2088>, <Element a at 0x1023a2a48>, <Element a at 0x1023a23c8>, <Element a
 at 0x1023a2788>]
[,,,,,,,,]

此代码段提取并打印响应中找到的所有链接,还可以使用XPath提取任何感兴趣的数据。

单击下一页按钮并等待后说:
driver.get(driver.getCurrentUrl())

使用for循环浏览页面

您是否想到该网站是为了阻止您尝试执行的操作而编写的?非常感谢这真的很有帮助哇,getcurrenturl正是我想要的内容forGetCurrentUrl()返回浏览器中的url,然后driver.get将源代码加载到变量中,以便使用web之类的变量或使用web本身进行分析。。。为什么要浪费记忆希望我真的这么做了。