Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Regex+;从URL列表下载多个csv文件;循环?_Python_Regex_Beautifulsoup_Python Requests - Fatal编程技术网

Python 如何使用Regex+;从URL列表下载多个csv文件;循环?

Python 如何使用Regex+;从URL列表下载多个csv文件;循环?,python,regex,beautifulsoup,python-requests,Python,Regex,Beautifulsoup,Python Requests,我一整天都在尝试下载一些csv文件,但运气不好。 我有一个我希望脚本访问的URL列表,然后从一些锚中提取href属性,检查它是否匹配某些正则表达式模式,并将它们下载到文件夹“example.com/*.csv”中 我正在使用macOs,Python3.7.2,我只在这台机器上试过,但一旦我成功了,我打算把它移到linux机器上。我从selenium和geckodriver开始,然后我发现我真的不需要它,可以通过BeautifulSoup+请求来实现 正如我所说,我已经修改了一整天,运气不好,这是

我一整天都在尝试下载一些csv文件,但运气不好。 我有一个我希望脚本访问的URL列表,然后从一些锚中提取href属性,检查它是否匹配某些正则表达式模式,并将它们下载到文件夹“example.com/*.csv”中

我正在使用macOs,Python3.7.2,我只在这台机器上试过,但一旦我成功了,我打算把它移到linux机器上。我从selenium和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,但无法确定在哪里添加regex模式,以便只能下载具有以下模式的URL

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

然后将csv文件实际写入“example.com/*.csv”

您可以用正则表达式匹配替换检查“\u FULLURL.endswith('.csv')”。使用urllib.urlretrieve()保存文件。例如,如果要保存到与python脚本位于同一目录下的名为“example.com/”的文件夹中,请执行以下操作:

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())

也许我没有得到这个问题:您是否正在寻找
打印(linkRegex.search(\u FULLURL.group(0))
?使用VSCode中的调试器,似乎文件名\u match\u obj从未通过该条件,所以它总是没有。这里是一个屏幕截图:您是对的。正如@Gsk在评论中所说,正确的用法是“搜索”,而不是“匹配”。代码已修复。是@蒂姆:成功了!!非常感谢。非常感谢。我要编辑一些打字错误;