我正在一个网页刮板工作,这是返回链接和职位说明,如果它匹配的关键字列表。我的问题是,正在导出的csv只是一个长句,链接和描述放在一行。在
如何有效地将描述和链接分成两个单独的列?我如何添加链接的剩余部分以便能够单击csv中的链接?还有没有一种方法可以避免csv中的重复条目?在
这是我的代码:
from selenium import webdriver
import time, re, csv
from bs4 import BeautifulSoup as BS
keywords = ["KI", "AI", "Big Data", "Data", "data", "big data",
"Analytics", "analytics", "digitalisierung", "ML",
"Machine Learning", "Daten", "Datenexperte",
"Datensicherheitsexperte", "Analytikleistungen"]
browser = webdriver.Chrome()
url = "https://ausschreibungen.usp.gv.at/at.gv.bmdw.eproc-p/public"
browser.implicitly_wait(30)
browser.get(url)
innerHTML = browser.execute_script("return
document.body.innerHTML")
soup = BS(browser.page_source, 'html.parser')
# browser.quit()
# print(soup.text)
tenders = soup.find('table', {'id': 'tenderlist'})
tbody = tenders.find('tbody')
browser.quit()
ausschreiben_found = []
for tr in tbody.find_all('tr'):
ausschreiben = tr.find_all('td')
for keyword in keywords:
for word in ausschreiben:
if keyword in str(word):
ausschreiben_found.append(word)
print(ausschreiben_found)
with open("ausschreiben.csv", 'a', encoding='utf-8') as toWrite:
fieldnames = ["Beschreibung", "Links"]
writer = csv.writer(toWrite)
writer.writerows(ausschreiben_found)
# subprocess.call('./Autopilot3.py')
print("Matched Ausschreiben have been collected.")
由于该网站使用Ajax和JavaScript库来填充页面上的表,所以获取所需数据的最简单方法是复制Ajax请求。在
来自服务器的JSON数据具有以下结构:
下面使用
^{pr2}$requests
模块从服务器获取JSON,并使用最小的HTML解析器从链接中提取文本。你可以自由使用beauthoulsoup来达到同样的目的。在用法:
为我打印这个:
我确信过滤/转换成CSV不再是个问题了。在
使用浏览器的开发人员工具(F12)来确定正在发送的其他请求参数以及它们是否与您相关。您还可以尝试使用
requests
模块的会话功能“混合”,复制所有的HTTP头和cookies,但是考虑到这似乎是一个政府网站,他们可能不会介意您正在删除它们。在分栏写
我希望这有帮助
使用的换行符和分隔符参数csv.writer班级
您可以在这里找到示例:https://docs.python.org/3/library/csv.html#writer-objects
相关问题 更多 >
编程相关推荐