Webscraping с проблемой регулярных выражений с l oop и переменными - PullRequest
0 голосов
/ 04 мая 2020

Не могли бы вы помочь мне отладить этот кусок кода? Я подозреваю, что есть проблема с переменными и '' или "", но я не могу понять, в чем проблема.

import requests
import re

urls = ['url1', 'url2', 'url3']
regexes = ['regex1', 'regex2', 'regex3']

url1 = 'https://...' 
regex1 = r'(\d+\.)\s+([^\n][A-Za-z]+)<\/a>'
url2 = 'https://...' 
regex2 = "r'\/review\/([^\n][A-Za-z]+)'"
url3 = 'https://...' 
regex3 = "r'(\d+\.)\s+([^\n][A-Za-z]+)'"


for url, regex in zip(urls, regexes):
    r = requests.get(url)
    results = re.findall(regex, r.text)

print(results)

1 Ответ

1 голос
/ 04 мая 2020

Проблемы с кодом, приведенным выше:

  • Regexen указаны с заключенными в двойные кавычки, которые они не должны
  • списки urls и regexes должны содержать url_ и regex_ переменные вместо строковых литералов, соответственно
  • С заданным отступом print(results) выводит совпадения только последней итерации.

Re закодировано:

import requests
import re


url1 = 'https://...' 
regex1 = r'(\d+\.)\s+([^\n][A-Za-z]+)<\/a>'
#
# ... other urls/regexen
#

urls = [url1, url2, url3]
regexes = [regex1, regex2, regex3]


for (url, regex) in zip(urls, regexes):
    r = requests.get(url)
    results = re.findall(regex, r.text)
    print(results)

Демоверсия доступна здесь (repl.it) (она использует конкретные c URL-адреса и более простое регулярное выражение на первой итерации для получения реальных совпадений) .

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