【发布时间】:2020-08-28 00:34:48
【问题描述】:
对于抓取有些新意,总体目标是抓取并插入 CSV。目前,我在预定页面上抓取 javascript 时遇到问题。我拥有的刮板会拉,但它只会从第 1 页拉,即使通过 for 循环喂它。已经尝试了大量的变化,但似乎无法让它发挥作用。任何提示/想法将不胜感激。
from bs4 import BeautifulSoup as bs
import selenium
from selenium import webdriver
import numpy as np
import pandas as pd
from time import sleep
from random import randint
pages = np.arange(1, 4, 1)
date2 = []
time2 = []
for page in pages:
page="https://web.tmxmoney.com/news.php?qm_symbol=BNS#qmpage" +str(page)
driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')
driver.get(page)
sleep(randint(2,10))
soup = bs(driver.page_source, 'lxml')
for text in pages:
date = driver.find_elements_by_xpath('//div[@class="date"]')
time = driver.find_elements_by_xpath('//div[@class="auther"]')
for item in date:
text1 = item.text
print(text1)
for item in time:
text2 = item.text
print(text2)
【问题讨论】:
-
也永远不要在 selenium 中使用 sleep 使用 webdriver 等待或隐式等待。
-
查看 date = driver.find_elements_by_xpath('//div[@class="date"]') 匹配 171 项。如果您检查他们的 xpath //*[@id="page1"]/div[1]/div[1] 和 //*[@id="page2"]/div[1]/div[1]。在更改页面时尝试使用他们的 id。
-
Wait 之前用的是wait,后面的教程用的是sleep,不过会调整。我想我可以每页添加一个 date1、date2 吗?我想每页拉出大约 15 项“日期”。我之前在 xpath 变量中的类前面添加了 ID,它也有同样的问题。欣赏输入。正在搞乱一个教程结构,它没有按照我想要的方式工作
-
如果您查看页面,您会注意到 15 个名为您可以在没有切换页面,然后循环它们。然后访问所有日期和时间。更新:在初始 page-1、page-2 循环中使用 for 循环来查找工作日期的每个列表。缺点:TMX 更新了他们的网站并使用了所有新标签哈哈哈
标签: javascript python selenium web-scraping