2017-09-10 2 views
0

J'essaie d'exporter la sortie d'un webscraper vers un fichier CSV. Le code fonctionne et j'obtiens la bonne sortie quand je l'exécute dans le terminal, mais il ne transfère pas au fichier CSV.La sortie BeautifulSoup n'est pas transférée vers un fichier CSV

Question

Lorsque je supprime la première boucle, il fonctionne très bien, mais je ne peux pas comprendre exactement ce que l'erreur dans cette partie?

code

import csv ; import requests 
from bs4 import BeautifulSoup 

outfile = open('ImplementTest8.csv','w') 
writer = csv.writer(outfile) 
writer.writerow(["job_link", "job_desc"]) 

res = requests.get("http://implementconsultinggroup.com/career/#/6257").text 
soup = BeautifulSoup(res,"lxml") 
links = soup.find_all("a") 

for li in soup.find('ul', class_='list-articles list').find_all('li'): 
    level = li.find_all('dd', {'class': 'author'})[1].get_text() 
    if "Graduate" in level: 
     links = li.find_all("href") 
     for link in links: 
      if "career" in link.get("href") and 'COPENHAGEN' in link.text: 
       item_link = link.get("href").strip() 
       item_text = link.text.replace("View Position","").encode('utf-8').strip() 
       writer.writerow([item_link, item_text]) 
       print(item_link, item_text) 

Modifié code

import csv ; import requests 
from bs4 import BeautifulSoup 

outfile = open('ImplementTest8.csv','w') 
writer = csv.writer(outfile) 
writer.writerow(["job_link", "job_desc"]) 

res = requests.get("http://implementconsultinggroup.com/career/#/6257").text 
soup = BeautifulSoup(res,"lxml") 
links = soup.find_all("a") 

for li in soup.find('ul', class_='list-articles list').find_all('li'): 
    level = li.find_all('dd', {'class': 'author'})[1].get_text() 
    if "Graduate" in level: 
     links = li.find_all(href=True) 
     for link in links: 
      if "career" in link.get("href") and 'COPENHAGEN' in link.text: 
       item_link = link.get("href").strip() 
       item_text = link.text.replace("View Position","").encode('utf-8').strip() 
       writer.writerow([item_link, item_text]) 
       print(item_link, item_text) 

Répondre

2

Href est une balise attribut et non un nom de balise. Si vous voulez vous assurer que tous vos liens ont un attribut href, vous pouvez l'utiliser comme keyward argument, sinon utilisez le nom du tag.

links = li.find_all(href=True) 
+0

Merci TM - Je viens d'essayer de changer le code de (href) à (href = True), mais il me donne l'erreur suivante: Fichier "", ligne 4 SyntaxError: mot-clé ne peut pas être un expression –

+0

N'utilisez pas de guillemets dans 'href', c'est un nom d'argument qui n'est pas une valeur d'argument. La valeur est 'True' –

+0

Got it - la feuille CSV est toujours vide. J'ai ajouté dans le code édité ci-dessus. –