只能将一个结果写入CSV文件

时间:2020-01-26 00:10:57

标签: python csv web-scraping beautifulsoup

我正在尝试编写我的第一个python脚本,该脚本会抓取特定公司的工作及其广告。但是,我只能将最后一个结果写入csv。我究竟做错了什么?

我已经将我的“ with open”语句放在for循环之外,因此它不应覆盖它,并且我尝试使用缩进,但是没有运气。

这是完整的代码(很麻烦,很抱歉)

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 :(得分:0)

第一件事是keys = 'q'仅得到一个值,因此for i in keys:只会循环访问相同的值,这将使脚本仅搜索virksomheder = ['matas', 'sybo']中的最后一个值。

第二件事是,当您创建一个for循环并使用for循环之外的值时,它将仅使用for循环的最后一个循环。例如:

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(),而我看到的是,您只在文件中写了两次,一次在开头,一次在结尾。

很抱歉无法使代码正常工作,但这应该有所帮助。