我正在尝试抓取以下网站:(请注意它是韩语) https://law.go.kr/lsSc.do?menuId=1&subMenuId=15&tabMenuId=81&query=
我需要抓取索引列旁边的“법령명”列中每个链接的所有内容(请参阅下图以供参考),但这些链接似乎不是唯一的。它们似乎都有 https://law.go.kr/lsSc.do?menuId=1&subMenuId=15&tabMenuId=81&query=#undefined 的 url,但该 url 似乎也不适用于创建汤。
我想知道这里可能有什么问题,或者根本不可能抓取这些。
答案 0 :(得分:0)
看来,网站在这些行上使用了 onClick 方法。所以唯一的方法是使用 Selenium,因为 requests 和 beautiful soup 无法评估 javascript 函数。
答案 1 :(得分:0)
数据是用Javascript加载的,所以BeautifulSoup看不到它。但是,您可以使用 requests
模块模拟 Ajax 请求。例如:
import re
import requests
from bs4 import BeautifulSoup
url = "https://law.go.kr/lsSc.do?menuId=1&subMenuId=15&tabMenuId=81&query="
menu_url = "https://law.go.kr/lsScListR.do?" + url.split("?")[-1]
content_url = "https://law.go.kr/lsInfoR.do"
data = {
"q": "*",
"outmax": "50",
"p18": "0",
"p19": "1,3",
"pg": "1",
"fsort": "10,41,21,31",
"lsType": "null",
"section": "lawNm",
"lsiSeq": "0",
"p9": "2,4",
}
soup = BeautifulSoup(requests.post(menu_url, data=data).content, "html.parser")
for a in soup.select(".left_list_bx a[onclick]"):
if "lsViewWideAll" not in a["onclick"]:
continue
lsiSeq, efYd, *_ = re.findall(r"\d+", a["onclick"])
data = {
"lsiSeq": lsiSeq,
"efYd": efYd,
"chrClsCd": "010202",
"vSct": "*",
"efGubun": "Y",
"ancYnChk": "0",
}
s = BeautifulSoup(
requests.post(content_url, data=data).content, "html.parser"
)
print(s.get_text(strip=True, separator="\n"))
print("-" * 80)
打印:
판례
연혁
위임행정규칙
규제
생활법령
10ㆍ27법난 피해자의 명예회복 등에 관한 법률
...and so on.