Получить ссылки из кода, используя xpath без pgid и sid - PullRequest
0 голосов
/ 25 октября 2019

При создании сканера для некоторых веб-сайтов с использованием scrapy я извлекал ссылки с помощью xpath. Но эти ссылки являются чем-то вроде этой ссылки

https://somedomain.com/someOtherUrl;sid=someSessionIdByServer;pgid=AgainSomeIdByServer

Теперь я не понимаю, почему этот sid и pgid присоединены, даже если вHREF. И код xpath, который я использовал, похож на

//a/@href

Могу ли я получить только ссылки. Итак, есть ли способ получить только ссылки с помощью Scrapy.

Я могу просто извлечь ссылки, используя некоторый код на Python. Но мне было любопытно узнать, есть ли какой-либо способ сделать что-то в xpath или может быть с настройкой в ​​scrapy.

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

Другой способ - использовать .re() или re_first() от Scrapy *:

response.xpath('//a/@href').re(r'^([^;]+)')
0 голосов
/ 31 октября 2019

Ну, потратив некоторое время и усилия, я узнал некоторые причины, почему это происходит. Итак, я отвечаю на свой вопрос, потому что это может помочь кому-то еще.

Итак, pgid (Process GroupID) и sid (Session ID) были добавлены самим сервером. Когда я вижу через DOM в моем браузере. Мой браузер уже обработал его, и там я не смог увидеть sid и pgid в ссылках. Но когда я получаю html, используя python, тогда ссылки приходят в формате url + sid + pgid. Причина указана в этой документации Scrapy

Я использовал

element.xpath("/a/@href").split(";")[0]

, чтобы получить только URL и удалить sid и pgid из ссылок. Это не полное решение xpath. Но это решило мою проблему.

0 голосов
/ 25 октября 2019

использовать функцию xpath substring-before.

//a/substring-before(@href, ';')

, поскольку scrapy все еще не поддерживает tokenize(), доступный в xpath 2.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...