Как загрузить несколько CSV-файлов из списка URL-адресов с помощью цикла Regex + for? - PullRequest
0 голосов
/ 30 января 2019

Я целый день пытался скачать некоторые CSV-файлы, но безуспешно.У меня есть список URL-адресов, которые я бы хотел, чтобы мой скрипт посетил, затем извлеките атрибут href из проверки некоторых якорей на соответствие определенному шаблону регулярных выражений и загрузите их в папку "example.com/*.csv"

Я использую macOs, python 3.7.2, я пробовал это только на этом компьютере, но как только я заставлю это работать, я планирую перенести это на машину linux.Я начал с селена и geckodriver, а потом обнаружил, что он мне действительно не нужен, и мог сделать это с помощью запросов BeautifulSoup +.

Как я уже сказал, я модифицировал его весь день, безповезло, это окончательная версия, взятая из другой ветки отсюда:

    import requests
    from bs4 import BeautifulSoup as bs
    from urllib.request import urlopen

    _URL = 'http://example.com/words'
    _URLD = str(_URL.strip('words'))

    # functional
    r = requests.get(_URL)
    soup = bs(r.text)
    urls = []
    names = []
    for i, link in enumerate(soup.findAll('a')):
        _FULLURL = _URLD + link.get('href')
        if _FULLURL.endswith('.csv'):
            urls.append(_FULLURL)
            names.append(soup.select('a')[i].attrs['href'])
            print(_FULLURL)
            requests.get(_FULLURL)

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

linkRegex = re.compile(r'/name-[0-9]+-[0-9]+-[0-9]+-[0-9]+.csv')

А затем фактически записать файлы csv в 'example.com/*.csv'

1 Ответ

0 голосов
/ 30 января 2019

Вы можете заменить проверку '_FULLURL.endswith ('. Csv ')' на соответствие регулярному выражению.Сохраните файл с помощью urllib.urlretrieve ().Например, если вы хотите сохранить в папку с именем example.com/ в том же каталоге, что и скрипт python:

import re
from bs4 import BeautifulSoup as bs
import urllib

_URL = 'http://example.com/words'
_URLD = str(_URL.strip('words'))

# functional
r = requests.get(_URL)
soup = bs(r.text)
urls = []
names = []
linkRegex = re.compile(r'/name-[0-9]+-[0-9]+-[0-9]+-[0-9]+.csv')
for i, link in enumerate(soup.findAll('a')):
    _FULLURL = _URLD + link.get('href')
    filename_match_obj = lingRegex.search(_FULLURL)
    if filename_match_obj is not None:
        urls.append(_FULLURL)
        names.append(soup.select('a')[i].attrs['href'])
        print(_FULLURL)
        urllib.urlretrieve(_FULLURL, 'example.com' + filename_match_obj.group())
...