Python网页抓取和正则表达式

时间:2016-05-16 16:13:38

标签: regex python-3.x web-crawler

我正在“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>

我真的很感谢你们帮助我...

1 个答案:

答案 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\']'
>>> 

这很容易打破你的正则表达式。