34933


pythonでgoogle検索の結果のなかから最初のwikipediaの項目を調べようとしています。  
最終的には検索するタグの中身の『$$$$ - Wikipedia』ような文字列を取得したいです。

[code]

    wikihref = soup.find('a', href=re.compile('^http://ja.wikipedeia.org/'))
    
[/code]

としても,wikihrefの結果がNoneになってしまいます。stringを要求しているので、結果としてNoneに対してstringが対応していないとattirbutionerrorが出てしまいます。

[code]

    links = soup.find_all('a')
    for link in links:
        if 'href' in link.attrs:
            #if link.text
            print(link.text, 'ja.wikipedia.org', link.attrs['href'])
    
[/code]

こちらのコードだと、ja.wikipedia.orgを含むすべてのタグが表示されるのですが、一つだけというわけにはいかないようです:

下記がコードになります。よろしくお願いいたします。

[code]

    # -*- coding:utf-8 -*-
    import io, sys, urllib
    import requests
    from bs4 import BeautifulSoup
    import codecs
    import GoogleSearch_List as R
    import re
    import json
    
    base_url = 'https://www.google.com.hk/search?q='
    
    suffix_url = '+wikipedia&ie=UTF-8'
    
    url_list = ['$$$$']
    
    for i in range(len(url_list)):
    target_url = base_url + url_list[i] + suffix_url
    target_html = requests.get(target_url).text
    soup = BeautifulSoup(target_html, 'html.parser')
    
    #ページタイトル
    #print(soup)
    links = soup.find_all('a')
    for link in links:
        if 'href' in link.attrs:
            #if link.text
            print(link.text, 'url?q=https://ja.wikipedia.org', link.attrs['href'])
    
    wikihref = soup.find('a', href=re.compile('^http://ja.wikipedeia.org/'))
    print(wikihref)
    
[/code]


CC BY-SA 3.0
2017-05-17T12:01:06.383
34786
2017-10-04T01:07:13.723
21201
question
python
beautifulsoupで指定した文字列のhrefを含むタグ内の文字列を返したい。


`ja.wikpedia.org` を含む最初のリンクが取得できればいいんですよね？ 見つかったら breakで
forループを終了すればいいんじゃないでしょうか。

[code]

    first_link = None
    links = soup.find_all('a')
    for link in links:
        if 'href' in link.attrs and 'ja.wikipedia.org' in link.attrs['href']:
            first_link = link
            break
    
    if first_link:
       print(first_link)
    
[/code]

また検索してる goolgle の ドメインが「www.google.com.hk」 なので検索結果に `ja.wikipedia.org`
がちゃんと出てくるのかはちょっとわかりませんでした。


CC BY-SA 3.0
2017-05-21T13:41:07.183
34902
2017-05-21T13:41:07.183
2168
34786
answer


正規表現`^http://ja.wikipedeia.org/`は検討の余地があります。

1.タイポ？(wikipedeia -> wikipedia)  
2.google検索ではhttpよりもhttpsが返ってくるのではないかということ  
3.www.google.com.hkで検索した結果に、ja.wikipedia.orgの結果が含まれるのかということ  
4.任意の一文字にマッチする`.`はエスケープして`\.`とするべきではないかということ

これらを考慮した正規表現として、例えば`https?://.+\.wikipedia\.org/`が考えられます。


CC BY-SA 3.0
2017-05-22T11:44:13.237
34933
2017-05-22T11:44:13.237
13199
34786
answer