【问题标题】:Having trouble scraping multiple pages in Python in Selenium- only pulls first page, or last page在 Selenium 中的 Python 中抓取多个页面时遇到问题 - 仅拉取第一页或最后一页
【发布时间】: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


【解决方案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 = []

driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')

for page in pages:

    page="https://web.tmxmoney.com/news.php?qm_symbol=BNS#qmpage" +str(page)
    driver.get(page)
    sleep(randint(2,10))
    soup = bs(driver.page_source, 'lxml')

    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)

【讨论】:

猜你喜欢
相关资源
最近更新 更多
热门标签