【发布时间】:2021-12-31 18:39:05
【问题描述】:
服务器返回以下响应,显然是 javascript 内容,我想抓取它,但我无法做到。
Element.update("to_users2", "\n\n\n
标签: python web-scraping beautifulsoup python-requests-html
服务器返回以下响应,显然是 javascript 内容,我想抓取它,但我无法做到。
Element.update("to_users2", "\n\n\n
标签: python web-scraping beautifulsoup python-requests-html
我认为使用 BeautifulSoup 解析 JavaScript 值是不可能的。一种解决方案是使用正则表达式:
main.py
import re
resp = """
Element.update("to_users2", "\n\n\n<div class="label-field-pair">\n <div class="label-field-pair11">\n <label for="student_grade">Select member\n <div class ="scrolable" >\n <div class="scroll-inside">\n <div class="hover"><a href="#" class="all" onClick="add_all_recipient('2,4')">Select all Add \n\n \n \n \n <div class="hover"><a href="#" before="Element.show('loader')" class="individual" onClick="add_recipient(2)" success="Element.hide('loader')">TestUserOne Add \n\n \n \n \n <div class="hover"><a href="#" before="Element.show('loader')" class="individual" onClick="add_recipient(4)" success="Element.hide('loader')">TestUserTwo Add \n\n \n \n \n \n \n\n\n\n");
"""
print(re.findall(r"add_recipient\(([0-9+])\)\" success=.+>([a-zA-Z0-9\w]+) Add", resp))
$ python main.py
[('2', 'TestUserOne'), ('4', 'TestUserTwo')]
【讨论】:
TypeError: expected string or bytes-like object传递响应时出现此错误
find() 将返回一个BeautifulSoup.Tag 对象。在尝试在正则表达式中使用它之前将其转换为字符串。
str(res),将其转换为字符串yield[]
res 到底是什么?请求响应对象?你的主帖里没有。没有任何关于您实际在做什么的背景信息,没有人可以帮助您。
res = requests.post(req_url, headers=headers, cookies=cookies, data=data) 因为它很敏感,所以我不能透露所有代码,但是在您发布的代码中可以正常工作,但是当将 re.findall(r"add_recipient\(([0-9+])\)\" success=.+>([a-zA-Z0-9\w]+) Add", resp) 替换为 re.findall(r"add_recipient\(([0-9+])\)\" success=.+>([a-zA-Z0-9\w]+) Add", str(res)) 时,只出现 []