티스토리 뷰
프로그래밍/Python
[오류해결] re.findall 사용 시 TypeError: expected string or bytes-like object 오류
알 수 없는 사용자 2021. 10. 13. 14:19728x90
반응형
import re
import requests as req
from bs4 import BeautifulSoup as bs
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36',
'Referer': 'http://www.mydlink.co.kr/2013/beta_board/pds.php'
}
res = req.get("http://www.mydlink.co.kr/2013/beta_board/pds.php", headers=headers)
soup = bs(res.text, 'lxml')
script = soup.select("script")[6]
lst = re.findall(r'myform.isp2.options\[\d+\] = new Option\(\".*\"\);', script)
print(lst)
우선 문제의 코드는 위와 같습니다. re.findall 부분에서 아래와 같은 오류가 났는데요!
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_20396/326307934.py in <module>
2
3 script = soup.select("script")[6]
----> 4 lst = re.findall(r'myform.isp2.options\[\d+\] = new Option\(\".*\"\);', script)
5 print(lst)
c:\python39\lib\re.py in findall(pattern, string, flags)
239
240 Empty matches are included in the result."""
--> 241 return _compile(pattern, flags).findall(string)
242
243 def finditer(pattern, string, flags=0):
TypeError: expected string or bytes-like object
오류가 나게 된 원인은 이렇습니다.
re.findall(r'정규표현식', 문자열)
두번째 인자에 문자열이 들어가야 되는데, 문자열이 들어가지 않아서 생긴 문제입니다.
제 코드에서 script 라는 변수는 soup.select("script")]6] 의 반환값은 print(script) 했을 때 문자열처럼 보이지만 사실은 BeautifulSoup 객체가 반환됩니다. 아래와 같은 형태입니다.
<class 'bs4.element.Tag'>
그렇기 때문에 만약에 객체를 두번째 인자로 사용하고 싶으시다면, 문자열 형태로 타입을 변환 시켜주어야 합니다.
아래 코드처럼 말이죠. str() 으로 script 변수를 감싸줌으로써 해당 오류 문제를 해결할 수 있습니다!
lst = re.findall(r'myform.isp2.options\[\d+\] = new Option\(\".*\"\);', str(script))
- 끝 -
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[django] 장고에서 사용자가 업로드한 파일 저장하는 방법 (0) | 2021.10.18 |
---|---|
[pymongo] 몽고DB 인서트 되어있는 값에 원하는 수 곱하기 (0) | 2021.10.14 |
[정규화] 최소값과 최대값을 이용하여 0~1 사이 범위의 값으로 변환하기 (0) | 2021.10.13 |
[pandas] CSV파일 원하는 줄 만큼만 파일 열기 (0) | 2021.10.12 |
[pandas] 판다스 데이터프레임 파일 Unnamed: 0 없이 열기 (0) | 2021.10.12 |
댓글