【问题标题】:Pandas using RegEx with a list in lxmlPandas 使用正则表达式和 lxml 中的列表
【发布时间】:2018-03-13 15:53:33
【问题描述】:

我正在尝试从网站中抓取符合特定标准的所有 URL。到目前为止,我的代码如下:

  import pandas as pd
  from urllib.request import urlopen
  import lxml.html
  links = []
  connection = urlopen("http://www.open.ac.uk/courses/modules")
  dom =  lxml.html.fromstring(connection.read())
  for link in dom.xpath('//a/@href'): 
      links.append(link)

这让我得到了列表中的 URL。但是,我只想要以 /[一些字母][3 个数字] 结尾的那些。我在 www.regex101.com 上有以下表达式:

  \/[a-z]*[0-9][0-9][0-9]

理想情况下,我想修改抓取,使其只返回所需的信息。如何使用列表中的表达式进行过滤?

我找到了一些可以回答我的问题的东西,但没有什么与我的问题相同。

我得到的数据的一个例子是

 /courses/modules/tm352
 /courses/modules/a332
 /courses/modules/ke322
 /courses/modules/e318
 /postgraduate
 #int-site
 http://www.open.ac.uk/contact/
 http://www2.open.ac.uk/tutors/help/who-to-contact
 http://www.open.ac.uk/about/employment/
 http://www.open.ac.uk/about/main/management/policies-and-
 statements/website-accessibility-open-university
 http://www.open.ac.uk/wales/cy

所以前 4 行匹配我想要的其余不匹配。

【问题讨论】:

  • 我建议在您的问题中添加您尝试过滤的 URL 示例(或一些示例)。

标签: python pandas lxml


【解决方案1】:

试试这个:

df = pd.DataFrame(links)
df[0] = df[0].str.extract('(.+[A-z]+\d\d\d$)', expand=False)
df.loc[df[0].notnull()]

【讨论】:

  • 感谢不是我需要的,但能够修改它以获得我需要的。
猜你喜欢
  • 2018-04-24
  • 2016-04-23
  • 1970-01-01
  • 2020-06-08
  • 2021-07-01
  • 2011-02-14
  • 2018-04-06
  • 2022-07-15
  • 2017-01-18
相关资源
最近更新 更多