Python 网页抓取链接

Python 网页抓取链接,python,regex,for-loop,if-statement,web-scraping,Python,Regex,For Loop,If Statement,Web Scraping,我正在从一个圣诞树农场网站上抓取链接。首先,我使用本教程获取所有链接。然后,我注意到我想要的链接没有使用正确的超文本传输协议,所以我创建了一个变量来连接。现在,我试图创建一个if语句,它获取每个链接并查找后跟“xmastrees.php”的任意两个字符。如果这是真的,那么将我的串联变量放在它的前面。如果链接不包含特定文本,则会将其删除。例如NYxmastrees.php将是http://www.pickyourownchristmastree.org/NYxmastrees.php和。/disc

我正在从一个圣诞树农场网站上抓取链接。首先,我使用本教程获取所有链接。然后,我注意到我想要的链接没有使用正确的超文本传输协议,所以我创建了一个变量来连接。现在,我试图创建一个
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
    if link['href'].re.search('^.\B.\$xmastrees'):
AttributeError: 'str' object has no attribute 're'
没有else del link['href']时出错:

    else del link['href']
           ^
SyntaxError: invalid syntax
    if link['href'].re.search('^.\B.\$xmastrees'):
AttributeError: 'str' object has no attribute 're'
您可以尝试使用:

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)


else:
在下一行->
del link['href']
re.search('^.\B.\$xmastrees',link['href'])
@Pedro Lobito return self.attrs[key]key错误:'href'是您需要的吗?如果是的话,我会发布一个答案。是的,这就是我想要的。是的,这很有效。你能解释一下为什么在我做了你第一次评论的那些更改后我的不起作用吗?你在regex和elif部分添加了一些语法错误。对,所以我在我的最后做了那些更正,最后得到了作为第二条评论发布的错误。除了这两个错误,还有更多的错误吗?另外,如果我要找的文本需要非常具体,该怎么办。这样我就需要使用那些特殊字符(^\B\$)?您可以创建一个新问题,例如,我需要一个正则表达式来匹配包含
ZZZ
的URL,我尝试了
ABC
,但出现了错误
XYZ
。请在这里发布新的问题链接,以便我可以帮助您。