使用正则表达式或美丽的汤从instagram获取someones网站

时间:2018-05-05 20:44:32

标签: regex python-3.x beautifulsoup instagram

我想从他们的Instagram生物中获取someones网站。 Instagram以text / javascript标签隐藏了这个网站,所以我不能像往常一样使用beautifulsoup的锚点来抓取网址。以下是页面源代码的一个片段,其中包含我尝试捕获的内容:

  

...,#34; country_block":假," external_url":" https://www.brittanyannecohen.com/pattern-control"" blocked_by_viewer&#34 ;:假,...

我注意到我想要抓取的链接始终附加到字典中的external_url属性(参见下图)。

我试图通过使用正则表达式获取此网址,但它无效,请参阅下面的代码

url=re.findall("[\"external_url\":]['https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+']",soup)

但我收到错误:

  

糟糕的角色范围[ - 位置31的<\ _

1 个答案:

答案 0 :(得分:1)

你有一个方括号,你应该有一个括号:

url=re.findall("[\"external_url\":]['https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+']",soup)
url=re.findall("[\"external_url\":]('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+']",soup)
                                   ^--- change [ to (

线索出现在错误消息bad character range [-\w中,这意味着字符类早于该表达式。我们早先发现['https?:...,这也没有意义 问题出在哪里。

我不知道你的正则表达式是否真的有效 - 检查起来太复杂了,特别是当有一种更简单的方法时。

使用此正则表达式

(?<="external_url":")[^"]+

整场比赛将是您的目标网址。

请参阅live regex demo