можно записать только один результат в CSV-файл - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь написать свой первый python скрипт, который очищает вакансии и их объявления для указанных компаний. Тем не менее, я могу записать только последний результат в CSV. Что я делаю неправильно?

Я поместил свое выражение «с открытым» вне for-l oop, чтобы оно не перезаписывало его, и я попытался поработать с отступами, но безуспешно.

вот весь код (извините, если он грязный)

import requests
import re
import csv
from bs4 import BeautifulSoup as soup

my_url = 'https://www.jobindex.dk/jobsoegning'

headers = [['url','num_jobs','job_link','job_annonce']]
with open ('webscrape-jobindex.csv','w') as file:
    writer = csv.writer(file)
    writer.writerow(headers)

    virksomheder = ['matas','sybo']
    keys = 'q'
    values = {}
    pattern = re.compile("https://www.jobindex.dk/jobannonce/jobnet")
    data = []

    for i in keys:
        for virk in virksomheder:
            values[i]=virk
    for query in values:
        response = requests.get(my_url, params=values)
        main_url = response.url
        html = response.text
        page = soup(html, 'html.parser')
        containers = page.find_all("div",{"class":"jobsearch-result"})
        num_jobs = len(containers)
        for link in page.findAll('a', href=pattern):
            sub_link = link.get('href')
        for url in sub_link:
            new_response = requests.get(sub_link)
            redirect_html = soup(new_response.text, "html.parser")
            tekst = redirect_html.findAll("div", {"id": "jobad_jobdetails_description"})
        for hver in tekst:
            annonce = (hver.get_text())
            sub_data = [annonce]
        main_data = [main_url, num_jobs, sub_link, sub_data]
        data.append(main_data)
        for row in data:
            writer.writerow(row)

1 Ответ

0 голосов
/ 26 января 2020

Во-первых, keys = 'q' получил только одно значение, поэтому for i in keys: будет просто l oop над тем же значением, что заставит скрипт искать только последнее значение в virksomheder = ['matas', 'sybo'].

Во-вторых, когда вы создаете для l oop и используете значение вне для l oop, оно просто использует последний l oop для l oop. Например:

for link in page.findAll('a', href=pattern):
    sub_link = link.get('href')

Это даст вам только последнюю ссылку, в данном случае https://www.jobindex.dk/jobannonce/jobnet/8714978, и это сделает это:

for url in sub_link:
    new_response = requests.get(sub_link)
    redirect_html = soup(new_response.text, "html.parser")
    tekst = redirect_html.findAll("div", {"id": "jobad_jobdetails_description"})

Чтобы дать вам только последнюю страницу, которая даст вам только текст объявления о последней вакансии.

Последнее, что вы должны использовать with open(), только когда читаете или пишете в файл и я вижу, что вы просто пишете в файл два раза, один в начале и один в конце.

Извините, что код не работает, но это должно помочь.

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