我的python代码成功地从https://www.groupeactual.eu/offre-emploi抓取了文本并将其保存在csv文件中。
但是,我希望上面的站点上有多个页面可供抓取。
例如,使用上面的网址,当我单击指向“第2页”的链接时,整个网址都会更改,但是当我在代码中使用该网址时,就会从第1页获得结果。
如何更改我的代码以从列出的所有可用页面中抓取数据?
我的代码:
from bs4 import BeautifulSoup
import requests
import pandas as pd
response = requests.get('https://www.groupeactual.eu/offre-emploi').text
soup = BeautifulSoup(response, "html.parser")
[Rest of the code goes here .... ]
答案 0 :(得分:0)
数据是通过Ajax从不同的URL加载的。该脚本遍历所有页面并打印标题,每个页面的链接:
import re
import requests
from bs4 import BeautifulSoup
data = {
'_token': "",
'limit': "21",
'order': "",
'adresse': "",
'google_adresse': "",
'distance': "",
'niveau-experience': "0;10",
'relations[besoin][contrat][debut]': "",
'js_range_demarrage_dates': "",
'informations[remunerations]': "10000;100000",
'page': ""
}
headers = {
'X-Requested-With': 'XMLHttpRequest'
}
url = 'https://www.groupeactual.eu/offre-emploi?limit=21&order=&adresse=&distance=&niveau-experience=0%3B10&relations%5Bbesoin%5D%5Bcontrat%5D%5Bdebut%5D=&js_range_demarrage_dates=&informations%5Bremunerations%5D=10000%3B100000&page=1'
api_url = 'https://www.groupeactual.eu/offre-emploi/search'
urls = []
with requests.session() as s:
soup = BeautifulSoup(s.get(url).content, 'html.parser')
data['_token'] = soup.select_one('meta[name="csrf-token"]')['content']
page = 1
while True:
data['page'] = page
print('Page {}...'.format(page))
soup = BeautifulSoup(s.post(api_url, data=data, headers=headers).content, 'html.parser')
cards = soup.select('.card')
if not cards:
break
for i, card in enumerate(cards, 1):
u = re.search(r"'(.*?)'", card['onclick']).group(1)
print('{:<5} {:<60} {}'.format(i, card.h3.text, u))
urls.append(u)
page += 1
print(urls)
打印:
Page 1...
1 Coffreur bancheur (H/F) https://www.groupeactual.eu/offre-emploi/coffreur-bancheur-hf-ernee-RE0046450A46458?utm_medium=api&utm_campaign=Coffreur+bancheur+%28H%2FF%29-46458
2 PEINTRE H/F https://www.groupeactual.eu/offre-emploi/peintre-hf-laval-RE0046827A50628?utm_medium=api&utm_campaign=PEINTRE+H%2FF-50628
3 PEINTRE H/F https://www.groupeactual.eu/offre-emploi/peintre-hf-augny-AG5640208TAA50789?utm_medium=api&utm_campaign=PEINTRE+H%2FF-50789
4 Technicien Fibre Optique (h/f) https://www.groupeactual.eu/offre-emploi/technicien-fibre-optique-hf-forbach-AG5640208BCA50790?utm_medium=api&utm_campaign=Technicien+Fibre+Optique+%28h%2Ff%29-50790
5 CONDUCTEUR D'ENGINS H/F https://www.groupeactual.eu/offre-emploi/conducteur-dengins-hf-amblainville-RE0047896A51376?utm_medium=api&utm_campaign=CONDUCTEUR+D%27ENGINS+H%2FF-51376
6 Technicien Informatique (h/f) https://www.groupeactual.eu/offre-emploi/technicien-informatique-hf-metz-RE0047858A52066?utm_medium=api&utm_campaign=Technicien+Informatique+%28h%2Ff%29-52066
7 Opérateur Traitement de Surface H/F https://www.groupeactual.eu/offre-emploi/operateur-traitement-de-surface-hf-bressuire-RE0050805A53145?utm_medium=api&utm_campaign=Op%C3%A9rateur+Traitement+de+Surface+H%2FF-53145
8 CHAUFFEUR PL SPL (H/F) https://www.groupeactual.eu/offre-emploi/chauffeur-pl-spl-hf-boulogne-sur-mer-RE0047560A53509?utm_medium=api&utm_campaign=CHAUFFEUR+PL+SPL+%28H%2FF%29-53509
9 Technicien d'Installations Électriques (H/F) https://www.groupeactual.eu/offre-emploi/technicien-dinstallations-electriques-hf-metz-RE0048762A53801?utm_medium=api&utm_campaign=Technicien+d%27Installations+%C3%89lectriques+%28H%2FF%29-53801
10 Cuisinier en industrie agroalimentaire (H/F) https://www.groupeactual.eu/offre-emploi/cuisinier-en-industrie-agroalimentaire-hf-talmont-saint-hilaire-RE0073692A93442?utm_medium=api&utm_campaign=Cuisinier+en+industrie+agroalimentaire+%28H%2FF%29-93442
11 Préparateur de commandes (H/F) https://www.groupeactual.eu/offre-emploi/preparateur-de-commandes-hf-sevremoine-RE0074893A94943?utm_medium=api&utm_campaign=Pr%C3%A9parateur+de+commandes+%28H%2FF%29-94943
... and so on (until page 135)