【问题标题】:Web Scraping links网页抓取链接
【发布时间】:2020-08-08 16:31:36
【问题描述】:

我正在从圣诞树农场网站上抓取链接。首先,我使用本教程method 获取所有链接。然后,我注意到我想要的链接没有使用正确的超文本传输​​协议,所以我创建了一个变量来连接。现在我正在尝试创建一个if 语句来获取每个链接并查找后跟“xmastrees.php”的任何两个字符。如果这是真的,那么我的连接变量将放在它的前面。如果链接不包含特定文本,则将其删除。例如 NYxmastrees.php 将是 http://www.pickyourownchristmastree.org/NYxmastrees.php 并且 ../disclaimer.htm 将被删除。我尝试了多种方法,但似乎找不到合适的方法。

这是我目前拥有并不断遇到语法错误的内容:del。我注释掉了那行并得到另一个错误,说我的字符串对象没有属性're'。这让我很困惑,因为我虽然可以将正则表达式与字符串一起使用??

source = requests.get('http://www.pickyourownchristmastree.org/').text
soup = BeautifulSoup(source, 'lxml')
concatenate = 'http://www.pickyourownchristmastree.org/'

find_state_group = soup.find('div', class_ = 'alert')
for link in find_state_group.find_all('a', href=True):
    if link['href'].re.search('^.\B.\$xmastrees'):
        states = concatenate + link
    else del link['href']
    print(link['href']

else del link['href'] 出错:

    else del link['href']
           ^
SyntaxError: invalid syntax

没有else del link['href'] 的错误:

    if link['href'].re.search('^.\B.\$xmastrees'):
AttributeError: 'str' object has no attribute 're'

【问题讨论】:

  • else: 在下一行 -> del link['href']re.search('^.\B.\$xmastrees', link['href'])
  • @Pedro Lobito return self.attrs[key] KeyError: 'href'
  • 您需要this 吗?如果是这样,我会发布一个答案。
  • 是的,这就是我要找的。​​span>

标签: python regex for-loop if-statement web-scraping


【解决方案1】:

您可以尝试使用:

import requests
from bs4 import BeautifulSoup as bs

u = "http://www.pickyourownchristmastree.org/"
soup = bs(requests.get(u).text, 'html5lib')

find_state_group = soup.find('div', {"class": 'alert'})
for link in find_state_group.find_all('a', href=True):
    if "mastrees" in link['href']:
        states = u + link['href']
        print(states)

http://www.pickyourownchristmastree.org/ALxmastrees.php
http://www.pickyourownchristmastree.org/AZxmastrees.php
http://www.pickyourownchristmastree.org/AKxmastrees.php
...

Demo

【讨论】:

  • 是的,这行得通。您能否解释一下为什么我在做出您第一次评论的更改后无法正常工作?
  • 您在 regex 和 elif 部分添加了几个语法错误。
  • 是的,所以我最终进行了这些更正,最终得到了我作为第二条评论发布的错误。是否有比这两个更多的错误?另外,如果我要查找的文本需要非常具体怎么办。我需要使用那些特殊字符(^\B\$)吗?
  • 您可以创建一个新问题,例如,我需要一个正则表达式来匹配包含ZZZ 的URL,我尝试过ABC,但出现错误XYZ。请在此处发布新问题链接,以便我为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2020-11-17
  • 2023-03-26
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多