【发布时间】:2020-05-02 21:14:10
【问题描述】:
我有一个包含五个网站的文本文件。在这些网站中的每一个中都有多个亚马逊链接,我的目标是收集所有这些链接。然而,五个网站之一使用“amzn.to”而不是“amazon.com”来引导亚马逊链接,我最初认为只需使用这个就可以解决:
any(re.findall(r'(amazon.com|amzn.to)', str, re.IGNORECASE))
我的亚马逊链接整体列表中应该包含十个 amzn.to 链接,但只找到了两个。
这是我的完整代码:
import requests
import re
from bs4 import BeautifulSoup
from collections import OrderedDict
file_name = raw_input("Enter file name: ")
filepath = "%s"%(file_name)
with open(filepath) as f:
listoflinks = [line.rstrip('\n') for line in f]
raw_links = []
for i in listoflinks:
html = requests.get(i).text
bs = BeautifulSoup(html)
possible_links = bs.find_all('a')
for link in possible_links:
if link.has_attr('href'):
raw_links.append(link.attrs['href'])
amazon_links = []
for str in raw_links:
if (any(re.findall(r'(amazon.com|amzn.to)', str, re.IGNORECASE))) and (str not in amazon_links):
amazon_links.append(str)
for i in amazon_links:
print i
print len(amazon_links)
我知道它有效,但没有我想要的那么好。请帮我查明问题。
【问题讨论】:
-
可以添加一些数据样本吗?
-
没有数据文件(或者也有问题的更短的例子),很难告诉你到底是什么问题。立即引人注目的是您的正则表达式中有
.,您想要\.,因为您想要匹配实际的句点,而不是任何字符。另请注意,使用给定的表达式,您将匹配比您想要的更多,例如'http://mymalware.haha/amazon.com/ransomware.exe'
标签: python regex web-scraping beautifulsoup