我正在尝试编写我的第一个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)
答案 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()
,而我看到的是,您只在文件中写了两次,一次在开头,一次在结尾。
很抱歉无法使代码正常工作,但这应该有所帮助。