如何使用beautifulsoup从python中的url抓取数据

时间:2019-12-03 12:39:04

标签: python-3.x selenium web-scraping beautifulsoup

我对Web抓取是陌生的,实际上我需要使用以下URL:http://desiopt.com/search-results-jobs/,这里有37116个工作,我想抓取所有公司信息(37116个工作,公司信息)。在上述网址的“查看作业详细信息”中。任何人都可以帮助我解决此任务。

2 个答案:

答案 0 :(得分:0)

您可以通过将page=1从1替换为371:http://desiopt.com/search-results-jobs/?searchId=1575377155.0222&action=search&page=1&listings_per_page=100&view=list来遍历此URL,并使用xpath //*[@class="viewDetails"]/a/@href获取视图详细信息的所有标记,然后从相应的路径中获取所需的所有详细信息页面。

答案 1 :(得分:0)

使用以下url

Numexpr does support contains

这是您将编辑page=listings_per_page=的两个参数:

当前该网站确实有37091个职位。

经过测试,我确实发现listings_per_page每页受到1000的限制。

示例:https://desiopt.com/search-results-jobs/?action=search&page=&listings_per_page=&view=list

因此,您需要从page=1page=38循环并设置listings_per_page=1000

这意味着每页1000条结果* 38页= 38000

之后

您将收集所有链接,并将其传递给list,条件是删除重复项,以防万一您担心sort。否则,只需将其传递给set即可,它不接受重复项,但不关心sort。然后,您可以解析urllist中的每个set来收集信息。

顺便说一句,我将遍历371页,每页包含100个项目,因此我将得到37100 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

结果可以在这里查看: https://desiopt.com/search-results-jobs/?action=search&page=1&listings_per_page=1000&view=list

  

输出为1885行,因为我让脚本在解析之前为公司删除了重复的links

在线运行代码:Click Here