2017-05-17 9 views
0

コードが実行されていないエラーが発生しています。 'r'の代わりに 'u'をつけて微調整しようとしましたが、同じエラーが表示されます。スタックから他のソリューションを試しましたが、どこにも行きませんでした。なにか提案を?Regex&BeautifulSoup - TypeError:予期している文字列またはバイト状のオブジェクト

#use urlib and beautifulsoup to scrpe table 

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
import re 
import pandas as pd 

url = 'https://www.example.com/profiles' 

page = urlopen(url).read() 
soup = BeautifulSoup(page, 'lxml') 
#print(soup) 

reEngName = re.compile(r'\[\*\*.+\*\*\]') 
reKorName = re.compile(r'\([^\/h]*\)') 
reProfile = re.compile(r'\|.+') 

for line in re.findall(reEngName, soup): 
    print(line) 

エラーメッセージ:

Traceback (most recent call last): 
    File "ckurllib.py", line 18, in <module> 
    for line in re.findall(reEngName, soup): 
    File "C:\Users\Sammy\Anaconda3\lib\re.py", line 222, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: expected string or bytes-like object 
+2

私はすべてを理解することはできませんが、 're.findall(reEngName、soup)'では 'BeautifulSoup'オブジェクトを提供しています。findallは' String'を期待しています。 – Gawil

+0

're.findall(reEngName、str(soup)) 'を使用して文字列に変換してください。 – Gawil

+0

@Gawilそれを優先させたい場合や、パラメータを使用して部分ページを切り捨てたい場合を除いて、石鹸を使用することはあまりありません。 soap – Swift

答えて

0

正規表現は、文字列を使用しています。ファイルの生のテキスト全体を検索する場合は、pageに正規表現を付けます。 Soapはパーサであり、内部的にhtmlを構文要素に分割し、ツリーに編成して、それらを反復することができます。たとえば、すべての<a>タグを反復する:(a)のdoThingsで

soup = BeautifulSoup.BeautifulSoup(urllib2.urlopen(url).read()) 
for a in soup('a'): 
    out = doThings(a) 

を:

if a['href'].startswith("http:///www.domain.net"): 

当然、後者の段階であなたは、文字列内の一致を確認するために正規表現を使用することができます。

関連する問題