Скрести стол с помощью скрапа - PullRequest
0 голосов
/ 15 апреля 2020

извиняюсь за длинный пост -

У меня есть таблица, в которую я пытаюсь вкопаться, но не могу понять, как копаться в этой таблице достаточно глубоко.

Это таблица:

<table class="detail-table" border="0" cellspacing="0">
 <tbody>
 <tr id="trAnimalID">
  ...
 </tr>
 <tr id="trSpecies">
  ...
 </tr>
 <tr id="trBreed">
  ...
 </tr>
 <tr id="trAge">
  ...
 <tr id="trSex">
  ...
 </tr>
 <tr id="trSize">
  ...
 </tr>
 <tr id="trColor">
  ...
 </tr>
 <tr id="trDeclawed">
  ...
 </tr>
 <tr id="trHousetrained">
  ...
 </tr>
 <tr id="trLocation">
  ...
 </tr>
 <tr id="trIntakeDate">
  <td class="detail-label" align="right">
   <b>Intake Date</b>
  </td>
  <td class="detail-value">
   <span id="lblIntakeDate">3/31/2020</span>&nbsp;
  </td>
 </tr>
 <tr id="trStage">
  <td class="detail-label" align="right">
   <b>Stage</b>
  </td>
  <td class="detail-value">
   <span id="lblStage">Reserved</span>
  </td>
 </tr>
 </tbody></table>

Я могу покопаться в ней с помощью команды оболочки scrapy:

text = response.xpath('//*[@class="detail-table"]//tr')[10].extract()

Я получаю следующее:

'<tr id="trIntakeDate">\r\n\t
  <td class="detail-label" align="right">\r\n
   <b>Intake Date</b>\r\n
  </td>\r\n\t
  <td class="detail-value">\r\n
   <span id="lblIntakeDate">3/31/2020</span>\xa0\r\n
  </td>\r\n
</tr>'

Я не могу понять, как просто получить значение для lblIntakeDate. Мне просто нужно 3/31/2020 . Кроме того, я хотел бы запустить это как лямбду и не могу понять, как заставить функцию execute вывести файл json, как я могу использовать командную строку. Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Попробуйте:

//table[@class='detail-table']/tbody//tr/td/span[@id='lblIntakeDate']/text()

Go https://www.online-toolz.com/tools/xpath-tester-online.php И, пожалуйста, удалите лишние символы, такие как &nbsp;

xpath_online_tester

0 голосов
/ 15 апреля 2020

попробуй:

from urllib.request import urlopen

url = ''
html = urlopen(url)
bs = BeautifulSoup(html.read(), 'html.parser')

for i in bs.find_all('a'):
    print(i.get_text())
...