使用以下url:
https://desiopt.com/search-results-jobs/?action=search&page=&listings_per_page=&view=list
这是您将编辑的两个参数page= 和listings_per_page=:
目前该网站确实有37091 职位。
经过我的测试,我确实看到listings_per_page 每页受到1000 的限制。
示例:https://desiopt.com/search-results-jobs/?action=search&page=1&listings_per_page=1000&view=list
所以你需要从page=1循环到page=38并设置listings_per_page=1000
这意味着1000 每页结果 * 38 page = 38000
之后:
您将收集所有链接并将其传递给list,条件是删除重复项,以防您担心sort。否则,只需将其传递给不接受重复的set,但它不关心sort。然后你可以解析list或set中的每一个url来收集信息。
顺便说一句,我将遍历371页面,每个页面包含100个项目,所以我会得到37100url(如果最后一页的url少于100,则更少) 并从中删除重复项,然后解析:
import requests
from bs4 import BeautifulSoup
import csv
links = []
try:
for item in range(1, 372):
print(f"Extraction Page# {item}")
r = requests.get(
f"https://desiopt.com/search-results-jobs/?action=search&page={item}&listings_per_page=100&view=list")
if r.status_code == 200:
soup = BeautifulSoup(r.text, 'html.parser')
for item in soup.findAll('span', attrs={'class': 'captions-field'}):
for a in item.findAll('a'):
a = a.get('href')
if a not in links:
links.append(a)
except KeyboardInterrupt:
print("Good Bye!")
exit()
data = []
try:
for link in links:
r = requests.get(link)
if r.status_code == 200:
soup = BeautifulSoup(r.text, 'html.parser')
for item in soup.findAll('div', attrs={'class': 'compProfileInfo'}):
a = [a.text.strip() for a in item.findAll('span')]
if a[6] == '':
a[6] = 'N/A'
data.append(a[0:7:2])
except KeyboardInterrupt:
print("Good Bye!")
exit()
while True:
try:
with open('output.csv', 'w+', newline='') as file:
writer = csv.writer(file)
writer.writerow(['Name', 'Phone', 'Email', 'Website'])
writer.writerows(data)
print("Operation Completed")
except PermissionError:
print("Please Close The File")
continue
except KeyboardInterrupt:
print("Good Bye")
exit()
break
结果可以在这里查看:
Click Here
输出是 1885 Rows,因为我已经让脚本在解析之前为公司删除重复的 links。
在线运行代码:Click Here