当前位置: 首页 > 知识库问答 >
问题:

Python网页抓取/数据提取

郎子平
2023-03-14

在我的硕士论文中,我正在探索通过web自动化从网站中提取数据的可能性。步骤如下:

  1. 登录网站(https://www.metal.com/Copper/201102250376)
  2. 输入用户名和密码
  3. 单击登录
  4. 将日期更改为2020年1月1日
  5. 刮取生成的表格数据,然后将其保存到csv文件中
  6. 用我电脑上的特定名称保存到特定文件夹
  7. 运行相同的序列,在同一浏览器窗口的新选项卡中下载其他材料的其他历史价格数据

我被困在步骤5、6和7中

从selenium导入webdriver

DRIVER\u PATH='C:\webdriver\chromedriver。exe的驱动程序=webdriver。Chrome(executable\u path=DRIVER\u path,Chrome\u options=ChromeOptions)

驾驶员最大化窗口()

驾驶员get('https://www.metal.com/Copper/201102250376')

#登录步骤LoginClick1=驱动程序。通过_css_选择器查找_element_('#_unext

lick1.click

用户输入=驱动程序。按用户id(“用户名”)用户输入查找元素。发送_键('#######')

password_input=driver.find_element_by_idpassword_input.send_keys('####')

提交=驱动程序。通过_css\u选择器('正文)查找_element\u

提交单击()

时间睡眠(2)

#向下滚动页面驱动程序中的关注点。执行_脚本(“window.scrollBy(01000)”,“”)

#更改货币驱动程序。find_元素(By.XPATH,“//img[contains(@class,'icon\uu BUqam')]”)。单击()

时间睡眠(1)

#从日期选择器更改日期

date_input=驱动程序。通过xpath查找元素('//*[@id=“\uu next”]/div/div[5]/div1/div[7]/div1/div2/div1/span1/div/i”)

date_input.click()

ActionChains(驱动程序)

行动将_移动到_元素(日期输入)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。发送_键(键。退格)。执行()

行动将_移动到_元素(日期输入)。发送密钥(“2020年1月1日”)。执行()操作。将_移动到_元素(日期输入)。发送_键(键。回车)。执行()

时间睡眠(2)

我一直在尝试从生成的表中刮取数据,然后使用selenium将其保存到csv文件中。请参阅下表生成的HTML代码

任何帮助都将不胜感激。

使用按钮下载文件按下下载按钮

driver.find_element(By.XPATH,"//img[contains(@src,'https://static.metal.com/www.metal.com/4.1.161/static/images/price/download.png')]").click()

time.sleep(1)

driver.find_element(By.XPATH,"//img[contains(@src,'https://static.metal.com/www.metal.com/4.1.161/static/images/price/download_excel.png')]").click()

由于我有多个文件/数据要下载,为了节省时间,我还探索了通过提供的下载按钮直接保存文件的可能性。

  • 我遇到的问题是我无法直接指定我希望它保存为的文件名。
  • 单击后,下载按钮会打开一个新选项卡,然后在几秒钟内关闭以初始化文件下载。
  • 然后使用材质代码-今天的日期文件命名格式下载该文件。

你知道怎么做吗?

共有1个答案

史默
2023-03-14

未点击登录按钮的原因是xpath//*[@id=“\uu next”]/div/div[3]/div[2]/div[2]/button[2]不正确。下一步的id是主容器,我们通过提供剩余的html节点结构导航到签名按钮

您的登录解决方案如下所示

driver = webdriver.Chrome(executable_path='C:\webdrivers\chromedriver.exe')
driver.maximize_window()
driver.get('https://www.metal.com/Nickel/201102250239')
# Click on Sign In
driver.find_element(By.XPATH, "//button[@class='button sign-in']").click()
# Enter username
driver.find_element(By.ID, "user_name").send_keys("your username")
# Enter password
driver.find_element(By.ID, "password").send_keys("your password") 
# Click Sign In
driver.find_element(By.XPATH, "//button[@type='submit']").click()

抓取数据

for element in driver.find_elements_by_class_name("historyBodyRow___1Bk9u"):
 elements =element.find_elements_by_tag_name("div")
 print("Date="+ elements[0].text)
 print("Price Range="+ elements[1].text)
 print("Avg="+ elements[2].text)
 print("Change="+ elements[3].text)
 print("Unit="+ elements[4].text)

添加到CSV

import csv
f = open('Path where you want to store the file', 'w')
writer = csv.writer(f)
for element in driver.find_elements_by_class_name("historyBodyRow___1Bk9u"):
  elements =element.find_elements_by_tag_name("div")
  entry = [elements[0].text ,elements[1].text ,elements[2].text , elements[3].text, elements[4].text]
  writer.writerow(entry)

f、 关闭

 类似资料:
  • 我是python新手,正在尝试从以下站点获取数据。虽然这段代码适用于不同的站点,但我无法让它适用于nextgen stats。有人想知道为什么吗?下面是我的代码和我得到的错误 下面是我得到的错误 df11=pd。读取html(urlwk1)回溯(上次调用):文件“”,第1行,在文件“C:\Users\USERX\AppData\Local\Packages\PythonSoftwareFounda

  • 问题内容: 我正在尝试开发一个简单的网页抓取工具。我想提取没有代码的文本。我实现了这个目标,但是我发现在某些加载了的页面中,我没有获得良好的结果。 例如,如果一些代码添加了一些文本,则看不到它,因为当我调用 我得到的原始文本没有添加文本(因为在客户端执行了)。 因此,我正在寻找一些解决此问题的想法。 问题答案: 一旦安装了,请确保二进制文件在当前路径中可用: 例 举个例子,我用以下HTML代码创建

  • 问题内容: 我的问题是:如何从网抓取数据,但是直到您单击例如“ Danhsáchchậm”,该数据才显示。我已经非常认真地尝试,当您单击“ Danhsáchchậm”时,这是onclick事件,它触发了一些javascript函数js函数之一是从服务器获取数据并将其插入到标签/占位符中,并在这时,您可以使用firefox之类的方法检查数据,是的,数据会在网页上显示给用户/查看者。因此,我们又该如何

  • 这是我第一次尝试编码,所以请原谅我的粗鲁。我试图通过以下链接来学习网页刮刮:https://data.gov.sg/dataset/industrial-arbitry-court-arwards-by-nature-of-trade-distrates?view_id=d3e444ef-54ed-4d0b-b715-1ee465f6d882&resource_id=c24d0d00-2d12-4

  • 问题内容: 我想从网站上获取每天的日出/日落时间。是否可以使用Python抓取网络内容?使用什么模块?有没有可用的教程? 问题答案: 结合使用urllib2和出色的BeautifulSoup库:

  • 我试图为所有大学足球队的名单收集数据,因为我想根据他们的名单组成对球队表现进行一些分析。 我的脚本在第一页上工作,它迭代每个团队,并可以打开每个团队的名册链接,但是然后我在名册页面上为一个团队运行的美丽汤命令继续抛出索引错误。当我查看超文本标记语言时,似乎我正在编写的命令应该工作,但当我从美丽的汤中打印页面源时,我在Chrome的开发人员工具中看不到什么。这是JS被用来提供内容的一些实例吗?如果是