我正在“op.gg”网站上用正则表达式抓取游戏玩家的名字。
我使用reqexr.com网站查看我想要获得的正则表达式,我找到了200名玩家。
但是我的python代码不起作用。我打算在列表中插入200个数据。但清单是空的。
我认为单引号(')对我的python代码不起作用。
这是我的代码..
import requests
from bs4 import BeautifulSoup
import re
user_name = input()
def hex_user_name(user_name):
hex_user_name = [hex(x) for x in user_name.encode('utf-8')]
for i,j in enumerate(hex_user_name):
hex_user_name[i] = '%'+j[2:].upper()
return ''.join(hex_user_name)
def get_user_name(user_name):
q = re.compile('k\'>([^<]{1,16})', re.M)
site = 'http://www.op.gg/summoner/userName=' + user_name
source_code = requests.get(site)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, 'lxml')
name = soup.find_all('a')
listB = q.findall(re.sub('[\s\n,]*', '' ,str(name)))
print(listB)
get_user_name(hex_user_name(user_name))
我强烈怀疑这一行
q = re.compile('k\'>([^<]{1,16})', re.M)
有问题..但我找不到任何错误。
这就是我想在正则表达式上使用的内容:k\'>([^<]*)
이곳은지옥인가(韩语单词)就是我想要获取HTML代码的数据。
<div class="SummonerName">
<a href="//www.op.gg/summoner/userName=%EC%9D%B4%EA%B3%B3%EC%9D%80%EC%A7%80%EC%98%A5%EC%9D%B8%EA%B0%80" class="Link" target='_blank'>이곳은지옥인가</a>
</div>
我真的很感谢你们帮助我...
答案 0 :(得分:0)
您的正则表达式正在运行
>>> x = ('<a href="//www.op.gg/summoner/userName=%EC%9D%B4%EA%B3%B3%EC%9D'
'%80%EC%A7%80%EC%98%A5%EC%9D%B8%EA%B0%80" class="Link" '
'target=\'_blank\'>이곳은지옥인가</a>')
>>> import re
>>> q = re.compile('k\'>([^<]{1,16})', re.M)
>>> q.findall(x)
['이곳은지옥인가']
你的正则表达式可能plain_text
listB = q.findall(re.sub('[\s\n,]*', '' , plain_text))
因为soup.find_all('a')
returns a list
,所以你需要循环使用它。
将列表强制转换为str
ca乱,因为它会逃脱'
和/或"
>>> li = ['k\'b"n', 'sdd']
>>> str(li)
'[\'k\\\'b"n\', \'sdd\']'
>>>
>>> li
['k\'b"n', 'sdd']
>>>
>>>
>>> li = ["k'b\"n", 'sdd']
>>> li
['k\'b"n', 'sdd']
>>> str(li)
'[\'k\\\'b"n\', \'sdd\']'
>>>
这很容易打破你的正则表达式。