파이썬 웹크롤링, html 내 다수 anchor 중 특정 anchor 선택하는 방법
조회수 677회
파이썬 웹크롤링 초보자입니다. BeautifulSoup을 활용해 네이버 뉴스 인링크 주소를 추출하는 게 목표입니다.
즉, 첨부 이미지에서 "http://sports.donga.com/"이 아닌 "https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=382&aid=0000896566" 를 긁어오고 싶습니다.
아래처럼 코딩했는데 자꾸 http://sports.donga.com/만 프린팅되네요...
살려주십시오
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen('https://search.naver.com/search.naver?&where=news&query=%22``%5B%EB%8B%A8%EB%8F%85%5D%22&sm=tab_pge&sort=1&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:dd,p:all,a:all&mynews=0&refresh_start=0&start=1')
bsObject = BeautifulSoup(html, "html.parser")
news_urls = []
for cover in bsObject.find_all('li', {'class':'bx'}):
link = cover.select('a.info')[0].get('href')
news_urls.append(link)
print(news_urls)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
네이버에서 검색어로 검색한 뉴스들의 링크를 가져오고 싶은 것으로 보입니다.
다음과 같이 수정하면 됩니다.
from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen('https://search.naver.com/search.naver?&where=news&query=%22``%5B%EB%8B%A8%EB%8F%85%5D%22&sm=tab_pge&sort=1&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:dd,p:all,a:all&mynews=0&refresh_start=0&start=1') bsObject = BeautifulSoup(html, "html.parser") news_urls = [] c = bsObject.find_all('a', {'class':'info'}) for cover in c: link = cover['href'] if link.find('https://news.naver.com') != -1: news_urls.append(link) print(news_urls) >> ['https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=100&oid=081&aid=0003171086', 'https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=018&aid=0004876243', 'https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=092&aid=0002216140', 'https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=015&aid=0004513548']
- 이렇게 해도 언론사별 아웃링크 뉴스 url이 추출되네요 ㅜㅜ. 다시말해 네이버 뉴스 시스템 상 스포츠동아 기사 url은 http://sports.donga.com/ 과 https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=382&aid=0000896566 이렇게 두 종류인데요. 알려주신 방법으로는 전자만 추출됩니다. 후자로 추출하는 방법은 없을까요? 알 수 없는 사용자 2021.3.15 16:52
- 후자가 출력되는걸 확인한 다음 올린 코드입니다 코드 그대로 복사해서 출력해보신것이 맞나요? 초보자 2021.3.15 17:57
- ['https://hankookilbo.com/News/Read/A2021031509320001810?did=NA', 'http://www.wowtv.co.kr/NewsCenter/News/Read?articleId=A202103150365&t=NN'] 알 수 없는 사용자 2021.3.15 18:01
- 그렇습니다. 위 댓글은 알려주신 코드 복사 시행해 추출한 url 중 일부입니다. 앞의 한국일보 기사의 경우 https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=103&oid=469&aid=0000588334 이 주소가 나왔으면 좋겠습니다 ㅜㅜ 알 수 없는 사용자 2021.3.15 18:11
- 단순 세부 주소가 아니라 네이버 뉴스에서 제공하는 url을 얻고 싶다는 건가요? 초보자 2021.3.15 18:45
- 내용 수정했으니 확인 바랍니다. 초보자 2021.3.15 18:49
- 맞습니다 이렇게 누차 답변달아주시고, 정말 감사합니다. 알 수 없는 사용자 2021.3.15 19:43
댓글 입력