Несколько для циклов и CSV-файлов - PullRequest
0 голосов
/ 14 марта 2019

Я новичок здесь и новичок в 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()

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Спасибо, Томас. На самом деле я немного подправил свой код, подумав, как мне его упростить (четыре для циклов слишком много, нет?), Поэтому с помощью следующего кода я решил свою проблему (отбросил «отдел» и «телефоны, потому что некоторые другие вопросы):

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 голос
/ 14 марта 2019

Привет, Бабр, добро пожаловать в 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()

И причина, по которой вам нужно отказаться от телефона и отдела, из-за плохой структуры сайта. Это не твоя вина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...