pythonでスクレイピング実行時でのエラーについて。


下記にてpythonのスクレイピングを実行しているのですが、

[code]

      Traceback (most recent call last):
      File "link_network.py", line 81, in <module>
        G = make_network(args.url, urls)
      File "link_network.py", line 33, in make_network
        article_name= url.replace(entry_url,"").replace("/","-")
    AttributeError: 'NoneType' object has no attribute 'replace'
    
[/code]

のエラーが表示されております。  
どの部分にどう記載すればよいのかわからず、是非教えていただきたく存じます。

修正

[code]

    def extract_url(root_url):
        page = 1
        is_articles = True
        urls = []
    
        while is_articles:
            UserAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15'
            html = request.urlopen(request.Request(root_url, None, {'User-Agent': UserAgent}))
            soup = BeautifulSoup(html, "html.parser")
            articles = soup.find_all("a")
            for article in articles:
                href = article.get("href")
                if href:
                    urls.append(href)
            is_articles = False
        return urls 
    
[/code]




<https://docs.python.org/ja/3.7/howto/urllib2.html#headers>

このページを参考にするとヘッダーにuser agentが設定できると思います。

また、スクレイピングによって非常に高頻度のアクセスをかけるとサービスによってはipごとブロックをする場合があります。  
その際に403が返ることも考えられますので最低でも１秒感覚のアクセスを心がけましょう。  
こうなってしまっては同じipからはアクセスすることが不可能になるため気をつけたほうがいいです。  
最悪の場合警察沙汰です。

<https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6>

