python - 如何使用带有多个 URL(输入)的 Selenium、Bs4 和 Docx 使用 Python 进行 WebScrape 到多个输出 Docx 文件中?
问题描述
对于如何使用 Selenium、BS4 和 Docx 抓取多个 URL,我一直在搞乱一些不同的解决方案,到目前为止,我已经能够抓取 1 个 URL 以准确提取我想要的内容,并且还能够将输出导出到单个 docx文件。只是当涉及到多个或 1+ 个 URL 时,我遇到了麻烦。
目前,我在下面有这段代码正在抓取内容。
我想创建一个循环来抓取,开始,只是 2 个网页或多个 url,并确定它何时可以循环遍历那些我可以将列表附加到我拥有的其他 URL 的列表。
我想将每个 url 内容/输出导出到每个单独的 docx 文件。
下面是代码:
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.webdriver import ActionChains
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import requests
import time
import docx
import os
doc = docx.Document()
url =["https://www.udemy.com/course/python-the-complete-python-developer-course/",
"https://www.udemy.com/course/the-creative-html5-css3-course-build-awesome-websites/"]
#output = [1,2]
list1 = url
for item in url:
try:
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get(item)
except:
# if the link cant be scraped
break
time.sleep(5)
button = driver.find_element_by_xpath("//div/div[@class='curriculum--sub-header--23ncD']/button[@class='udlite-btn udlite-btn-medium udlite-btn-ghost udlite-heading-sm']")
button.click()
time.sleep(5)
html = driver.page_source
soup = BeautifulSoup(html,'html.parser')
main = soup.find_all('div',{'class' : 'section--panel--1tqxC panel--panel--3NYBX'})
for mains in main:
header = mains.find_all("span",{'class' : 'section--section-title--8blTh'})
for title in header:
outputtitle = title.text
doc.add_heading(outputtitle,1)
for titles in header:
sub = mains.find_all('div',{'class' : 'section--row--3PNBT'})
for a in sub:
sub1 = a.find_all("span")
for sub in sub1:
outputsub = sub.text
doc.add_heading(outputsub,3)
for i in range(len(list1)):
doc.save("file%s.docx" %i)
解决方案
创建一个存储链接的列表
links = []
用 try except 语句遍历它们
for item in links:
try:
# open item
except:
# if the link cant be scraped
break
# scrape the link
with open(f'{item.replace(".", "").replace("/", "")}', 'w') as file:
file.write(scraped_info)
推荐阅读
- c++ - Hoard 中的 `bool c2s(int)` 是什么?
- angular - Angular - 将分组表单作为没有组的单一表单提交
- compiler-errors - 机器人框架项目在每个文件上显示错误,但所有测试用例仍然成功运行
- sql - 更新表导致子表上的页级锁定
- html - 为什么按钮向左移动?
- javascript - 图表 js 显示关于悬停图例的数据
- javascript - Realex HPP 整页重定向 - 响应处理程序
- python - Gensim 的相似度接口使用 TfIdf + LdaModel 对完全相同的文档给出低相似度分数
- python - 不完整 seaborn 热图上的等高线
- asp.net-core - 无效的对象名称'RefreshToken