#python #xpath #scrapy
Вопрос:
Это источник страницы (результат поиска Google, Chrome)
<div class="yuRUbf">
<a href="https://www.apple.com/my/iphone/compare/" data-ved="2ahUKEwitnOWgoMHxAhUdxIsBHVDpCmIQFjALegQIAxAD" ping="/url?sa=tamp;amp;source=webamp;amp;rct=jamp;amp;url=https://www.apple.com/my/iphone/compare/amp;amp;ved=2ahUKEwitnOWgoMHxAhUdxIsBHVDpCmIQFjALegQIAxAD">
<br>
<h3 class="LC20lb DKV0Md">iPhone - Compare Models - Apple (MY)</h3><div class="TbwUpd NJjxre"><cite class="iUh30 Zu0yb qLRx3b tjvcx">https: //www.apple.com<span class="dyjrff qzEoUe"> › iphone › compare</span></cite></div></a><div class="B6fmyf"><div class="TbwUpd"><cite class="iUh30 Zu0yb qLRx3b tjvcx">https://www.apple.com<span class="dyjrff qzEoUe"> › iphone › compare</span></cite></div><div class="eFM0qc"><span><div jscontroller="hiU8Ie" class="action-menu"><a class="GHDvEf" href="#" aria-label="Result options" aria-expanded="false" aria-haspopup="true" role="button" jsaction="PZcoEd;keydown:wU6FVd;keypress:uWmNaf" data-ved="2ahUKEwitnOWgoMHxAhUdxIsBHVDpCmIQ7B0wC3oECAMQBg"><span class="gTl8xb"></span></a><ol class="action-menu-panel zsYMMe" role="menu" tabindex="-1" jsaction="keydown:Xiq7wd;mouseover:pKPowd;mouseout:O9bKS" data-ved="2ahUKEwitnOWgoMHxAhUdxIsBHVDpCmIQqR8wC3oECAMQBw"><li class="action-menu-item OhScic zsYMMe" role="menuitem"><a class="fl" href="https://webcache.googleusercontent.com/search?q=cache:6zhDHqY_aM4J:https://www.apple.com/my/iphone/compare/ amp;amp;cd=12amp;amp;hl=enamp;amp;ct=clnkamp;amp;gl=kr" ping="/url?sa=tamp;amp;source=webamp;amp;rct=jamp;amp;url=https://webcache.googleusercontent.com/search?q=cache:6zhDHqY_aM4J:https://www.apple.com/my/iphone/compare/+&cd=12&hl=en&ct=c
Это функция синтаксического анализа, я использую xpath для извлечения элементов,которые мне нужны (заголовки, ссылки).
def parse(self, response):
titles = response.xpath('//*[@id="main"]/div/div/div/a/h3/div//text()').extract()
links = response.xpath('//*[@id="main"]/div/div/div/a/@href').extract()
items = []
for idx in range(len(titles)):
item = GoogleScraperItem()
item['title'] = titles[idx]
item['link'] = links[idx].lstrip("/url?q=")
print('titles', titles)
print('links', links)
items.append(item)
df = pd.DataFrame(items, columns=['title', 'link'])
writer = pd.ExcelWriter('test6.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='test6.xlsx')
writer.save()
return items
выход
‘название’: ‘iPhone — Сравните модели — Apple (МОЙ)’
..пропустить..
Проблема
Получает ненужную строку ССЫЛКИ.На самом деле, если вы откроете его в Chrome, страница не откроется нормально.
Рабочая ссылка : https://www.apple.com/my/iphone/compare/
Вопрос
Чтобы извлечь «Рабочую ссылку» с помощью xpath или css?
Ответ №1:
Одним из решений может быть последующая обработка ссылки . Используйте разделитель параметров»amp;», чтобы удалить параметры .
link=link.split('amp;')[0]
Итак , скажите, что вы хотите :
def parse(self, response):
titles = response.xpath('//*[@id="main"]/div/div/div/a/h3/div//text()').extract()
links = response.xpath('//*[@id="main"]/div/div/div/a/@href').extract()
items = []
for idx in range(len(titles)):
item = GoogleScraperItem()
item['title'] = titles[idx]
item['link'] = links[idx].lstrip("/url?q=")
#Inserted here
item['link'] = item['link].split('amp;')[0]
print('titles', titles)
print('links', links)
items.append(item)
df = pd.DataFrame(items, columns=['title', 'link'])
writer = pd.ExcelWriter('test6.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='test6.xlsx')
writer.save()
return items
Комментарии:
1. Спасибо. Я уже комментировал выше ответ, мой окончательный URL-адрес будет иметь amp;start={pageNum}’, так что, если я использую link=link.split(‘amp;’)[0], то я не смогу использовать свой URL. Я прав?
2. Вы можете изменить его немного дальше . Скажем , если вы знаете, что первый параметр будет начальным параметром, вы можете использовать что-то вроде : 1. ссылка=ссылка.split (‘amp;’) — > даст массив с URL-адресом в 0-м индексе, за которым последуют остальные параметры . 2. ссылка=ссылка[0] ‘amp;’ ссылка[1] это даст ответ в виде url/amp;sa =U