【问题标题】:web-scraping, regex and iteration in pythonpython中的网络抓取,正则表达式和迭代
【发布时间】:2015-09-05 22:14:53
【问题描述】:

我有以下网址'http://www.alriyadh.com/file/278?&page=1' 我想编写一个正则表达式来访问从 page=2 到 page=12 的 url

例如,这个url需要'http://www.alriyadh.com/file/278?&page=4',而不是page = 14

我认为可行的是迭代指定的 10 个页面以访问其中的所有 url 的函数。我试过这个正则表达式但不起作用 '.*?=[2-9]'

我的目标是使用报纸包从这些网址中获取内容。我只是想要这些数据用于我的研究

提前致谢

【问题讨论】:

  • 当您说.*?=[2-9] 不起作用时,您是什么意思?它与任何 URL 都不匹配吗?
  • 带范围的for循环不酷吗?为什么是正则表达式,我不明白。
  • 您是否有理由尝试编写正则表达式来生成页码,而不是使用 BeautifulSoup 将 URL 从页面上拉到第 12 页?我希望您实际上并没有使用正则表达式进行 XHTML 解析,since that's generally the wrong approach
  • 我正在尝试简单的事情,所以从第 2 页到第 12 页的 loof 会得到我想要的一切。还有其他方法吗?
  • 我尝试过 BeautifulSoup,它非常适合从一个 url 获取内容。我正在尝试从此页面获取所有 url,然后在下一步中将它们废弃。这有意义吗?

标签: python regex python-2.7 beautifulsoup python-requests


【解决方案1】:

不需要正则表达式,一个简单的预设循环就可以了。

import requests
from bs4 import BeautifulSoup as bs

url = 'http://www.alriyadh.com/file/278?&page='

for page in range(2,13):
    html = requests.get(url+str(page)).text
    soup = bs(html)

【讨论】:

    【解决方案2】:

    这是一个访问正确范围(即 2-12)的正则表达式:

    ([2-9]|1[012])

    从您现在所拥有的情况来看,我不确定您的正则表达式是否会按照您的预期工作。也许我完全误解了您的正则表达式,但是 '?=' 是为了向前看吗? 或者您实际上是在寻找“?”紧跟一个'=' 紧跟任何数字2-9? 您对正则表达式的熟悉程度如何?找到有意义的匹配项似乎很危险。

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2013-07-30
      相关资源
      最近更新 更多