gpt4 book ai didi

python - 如何使用不变的 URL 抓取多个页面 - python

转载 作者:太空狗 更新时间:2023-10-30 02:59:34 27 4
gpt4 key购买 nike

我正在尝试抓取此网站:http://data.eastmoney.com/xg/xg/

到目前为止,我已经使用 selenium 执行 javascript 并抓取了表。但是,我现在的代码只能让我进入第一页。我想知道是否有办法访问其他 17 个页面,因为当我点击下一页时,URL 不会改变,所以我不能每次都迭代不同的 URL

下面是我目前的代码:

from selenium import webdriver
import lxml
from bs4 import BeautifulSoup
import time

def scrape():
url = 'http://data.eastmoney.com/xg/xg/'
d={}
f = open('east.txt','a')
driver = webdriver.PhantomJS()
driver.get(url)
lst = [x for x in range(0,25)]
htmlsource = driver.page_source
bs = BeautifulSoup(htmlsource)
heading = bs.find_all('thead')[0]
hlist = []
for header in heading.find_all('tr'):
head = header.find_all('th')
for i in lst:
if i!=2:
hlist.append(head[i].get_text().strip())
h = '|'.join(hlist)
print h
table = bs.find_all('tbody')[0]
for row in table.find_all('tr'):
cells = row.find_all('td')
d[cells[0].get_text()]=[y.get_text() for y in cells]
for key in d:
ret=[]
for i in lst:
if i != 2:
ret.append(d.get(key)[i])
s = '|'.join(ret)
print s

if __name__ == "__main__":
scrape()

或者如果我使用 webdriver.Chrome() 而不是 PhantomJS 然后 Python 在新页面上运行,每次单击后,我是否可以通过浏览器单击下一步?

最佳答案

这不是一个简单的交互页面,需要使用 Explicit Waits等待“加载”指示器的不可见性。

这是您可以用作起点的完整且有效的实现:

# -*- coding: utf-8 -*-
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 import webdriver
import time

url = "http://data.eastmoney.com/xg/xg/"
driver = webdriver.PhantomJS()
driver.get(url)

def get_table_results(driver):
for row in driver.find_elements_by_css_selector("table#dt_1 tr[class]"):
print [cell.text for cell in row.find_elements_by_tag_name("td")]


# initial wait for results
WebDriverWait(driver, 10).until(EC.invisibility_of_element_located((By.XPATH, u"//th[. = '加载中......']")))


while True:
# print current page number
page_number = driver.find_element_by_id("gopage").get_attribute("value")
print "Page #" + page_number

get_table_results(driver)

next_link = driver.find_element_by_link_text("下一页")
if "nolink" in next_link.get_attribute("class"):
break

next_link.click()
time.sleep(2) # TODO: fix?

# wait for results to load
WebDriverWait(driver, 10).until(EC.invisibility_of_element_located((By.XPATH, u"//img[contains(@src, 'loading')]")))

print "------"

我们的想法是有一个无限循环,只有当“下一页”链接被禁用(没有更多页面可用)时我们才会退出。在每次迭代中,获取表格结果(为了示例而在控制台上打印),单击下一个链接并等待网格顶部出现“加载”旋转圆圈的不可见性。

关于python - 如何使用不变的 URL 抓取多个页面 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com