我是python新手,现在还是python新手,目前正在学习一些基本知识,主要是抓图,我遇到了一个问题,希望您能帮助我解决。
我正在尝试从网站上抓取一些细节并将它们写入CSV文件,但是我只能将最后的结果写入CSV文件,显然我的脚本只是覆盖了数据。
如果您在我的代码中发现任何错误或有待改进的地方(我敢肯定还有改进的地方),也很高兴您也指出这些错误。
也,对于视频/教程的任何建议都可以帮助我改善python和抓取技能,我们将不胜感激。
import requests
from bs4 import BeautifulSoup
import csv
url = 'https://www.tamarackgc.com/club-contacts'
source = requests.get(url).text
soup = BeautifulSoup (source, 'lxml')
csv_file = open('contacts.csv', 'w')
csv_writer = csv.writer (csv_file)
csv_writer.writerow(["department", "name", "position", "phone"])
for department in soup.find_all("div", class_="view-content"):
department_name = department.h3
print (department_name.text)
for contacts in soup.find_all("div", class_="col-md-7 col-xs-10"):
contact_name = contacts.strong
print(contact_name.text)
for position in soup.find_all("div", class_="field-content"):
print(position.text)
for phone in soup.find_all("div", class_="modal-content"):
first_phone = phone.h3
first_phones = first_phone
print(first_phones)
csv_writer.writerow([department_name, contact_name, position, first_phones])
csv_file.close()
答案 0 :(得分:2)
感谢托马斯, 实际上,我考虑了如何简化代码(四个for循环太多,不是吗?),因此对代码进行了一些调整,因此使用以下代码解决了我的问题(删除了“部门”和“电话”,因为其他一些问题) ):
import requests
from bs4 import BeautifulSoup
import csv
url = 'https://www.tamarackgc.com/club-contacts'
source = requests.get(url).text
soup = BeautifulSoup (source, 'lxml')
f = open("contactslot.csv", "w+")
csv_writer = csv.writer (f)
csv_writer.writerow(["Name", "Position"])
infomation = soup.find_all("div", class_="well profile")
info = information[0]
for info in information:
contact_name = info.find_all("div", class_="col-md-7 col-xs-10")
names = contact_name[0].strong
name = names.text
print (name)
position_name = info.find_all("div", class_="field-content")
position = position_name[0].text
print(position)
print("")
csv_writer.writerow([name, position])
f.close()
答案 1 :(得分:1)
您好,Babr欢迎使用python。您的回答很好,这是您可以做得更好的一件事。
如果只需要一个元素,请使用find
替换find_all
import requests
from bs4 import BeautifulSoup
import csv
url = 'https://www.tamarackgc.com/club-contacts'
source = requests.get(url).text
soup = BeautifulSoup(source, 'lxml')
f = open("/Users/mingjunliu/Downloads/contacts.csv", "w+")
csv_writer = csv.writer(f)
csv_writer.writerow(["Name", "Position"])
for info in soup.find_all("div", class_="well profile"):
contact_name = info.find("div", class_="col-md-7 col-xs-10")
names = contact_name.strong
name = names.text
print(name)
position_name = info.find("div", class_="field-content")
position = position_name.text
print(position)
print("")
csv_writer.writerow([name, position])
f.close()
并且您需要删除电话和部门的原因是由于不良的网站结构。这不是你的错。