Новое в веб-скребинге - PullRequest
1 голос
/ 28 июня 2019

Попытка научить себя веб-скребу, просто для удовольствия.Решил использовать его для просмотра списка вакансий, размещенного на сайте.Я застрял.Я хочу быть в состоянии получить все задания, перечисленные на этой странице, но не могу заставить его распознавать что-либо более глубокое в контейнере, который я сделал.Любые предложения более чем приветствуются.

Текущий код:

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

myURL = 'https://jobs.collinsaerospace.com/search-jobs/'

uClient = uReq(myURL)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")
container = page_soup.findAll("section", {"id":"search-results-list"})
container

Образец контейнера:

<section id="search-results-list">
 <ul>
 <li>
 <a data-job-id="12394447" href="/job/melbourne/test-technician/1738/12394447">
 <h2>Test Technician</h2>
 <span class="job-location">Melbourne, Florida</span>
 <span class="job-date-posted">06/27/2019</span>
 </a>
 </li>
 <li>
 <a data-job-id="12394445" href="/job/cedar-rapids/associate-systems-engineer/1738/12394445">
 <h2>Associate Systems Engineer</h2>
 <span class="job-location">Cedar Rapids, Iowa</span>
 <span class="job-date-posted">06/27/2019</span>
 </a>
 </li>
 <li>

Я пытаюсь понять, как на самом деле извлечьИнформация уровня h2 (или любая другая информация в контейнере, который я сейчас создал)

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Если я правильно понимаю, вы хотите извлечь заголовки из вашего container.Вот фрагмент, чтобы сделать это:

for child in container:
    for heading in child.find_all('h2'):
        print(heading.text)

Обратите внимание, что child и heading - это всего лишь фиктивные переменные, которые я использую для перебора ResultSet (что контейнер) и списка (который всезаголовки есть).Для каждого ребенка я ищу все теги, а для каждого печатаю его текст.

Если вы хотите извлечь что-то еще из вашего контейнера, просто настройте find_all.

2 голосов
/ 28 июня 2019

Я пытался повторить то же самое, используя lxml.

import requests
from lxml import html
resp = requests.get('https://jobs.collinsaerospace.com/search-jobs/')
data_root = html.fromstring(resp.content)

data = []
for node in data_root.xpath('//section[@id="search-results-list"]/ul/li'):
    data.append({"url":node.xpath('a/@href')[0],"name":node.xpath('a/h2/text()')[0],"location":node.xpath('a/span[@class="job-location"]/text()')[0],"posted":node.xpath('a/span[@class="job-date-posted"]/text()')[0]})
print(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...