Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解析字符串_Python_Parsing_Beautifulsoup - Fatal编程技术网

Python解析字符串

Python解析字符串,python,parsing,beautifulsoup,Python,Parsing,Beautifulsoup,我有一个非常恼人的问题,答案可能很简单,但我不能把2和2放在一起 我有一个字符串示例,它看起来像这样: <a href="javascript:void(0);" onclick="viewsite(38903);" class="followbutton">Visit</a> 每次我加载页面时,数字38903都会不同。我需要一种方法,能够在每次加载页面时解析这些数字。我已经获得了足够多的信息来获取和包含上面的HTML代码片段,但无法仅获取数字 再说一次,这可能是一

我有一个非常恼人的问题,答案可能很简单,但我不能把2和2放在一起

我有一个字符串示例,它看起来像这样:

<a href="javascript:void(0);" onclick="viewsite(38903);" class="followbutton">Visit</a>


每次我加载页面时,数字38903都会不同。我需要一种方法,能够在每次加载页面时解析这些数字。我已经获得了足够多的信息来获取和包含上面的HTML代码片段,但无法仅获取数字


再说一次,这可能是一件很容易的事,只是想不出来。提前谢谢

如果您使用的是BeautifulSoup,只需点击
onclick
字符串就非常简单了,这将使操作更加简单。但这里有一个非常粗糙的方法:

import re
result = re.sub("\D", "", html_string)[1:]
\D
匹配所有非数字,因此这将删除字符串中非数字的所有内容。然后从
javascript:void(0)
中删除“0”

其他选项:使用re.search获取一系列数字,并获取第二组。或者使用re.search来匹配子字符串后面的一系列数字,其中子字符串是import re >>>抓取html='''''''' >>>关于findall(r'viewsite\(\d+);',grabbedhtml)[0] '38903'
这将专门查找viewsite()的全数字参数。与Andrew的答案相比,您可能更喜欢这一点,因为如果HTML字符串中出现其他数字,您将开始得到不正确的结果。

“获取并包含HTML代码片段”,使用什么?Python中的任何内容。但目前正在使用BeautifulSoup。将BeautifulSoup添加到标记列表中。(此答案的原始版本将
re.sub
视为它修改了html_字符串本身,当然不会,因为Python字符串是不可变的。它已被编辑以修复此问题。)是的,这会更好——尽管如果OP使用的是问题注释中提到的BeautifulSoup,那么最好只是找到onclick字符串并处理它,而不是解析整个内容。
import re
result = re.sub("\D", "", a['onclick'])
>>> import re
>>> grabbed_html = '''<a href="javascript:void(0);" onclick="viewsite(38903);" class="followbutton">Visit</a>'''
>>> re.findall(r'viewsite\((\d+)\);',grabbedhtml)[0]
'38903'
import re
r = re.compile('viewsite\((\d+)\)')
r.findall(s)