Python 根据Beauty soup中的链接声明,只解析url

Python 根据Beauty soup中的链接声明,只解析url,python,python-3.x,parsing,beautifulsoup,html-parsing,Python,Python 3.x,Parsing,Beautifulsoup,Html Parsing,如果页面满足某种条件,其中xx\u web\u job\u alt\u关键字中的一个关键字在job.get\u text()的文本中,我试图最终从页面中解析出url xx_good_jobs = [] xx_web_job_alt_keywords = ['Website'] # <a class="result-title hdrlnk" href="//mywebsite.com/web/123.html" data-id="5966181668">Print business

如果页面满足某种条件,其中
xx\u web\u job\u alt\u关键字中的一个关键字在
job.get\u text()的文本中,我试图最终从页面中解析出
url

xx_good_jobs = []
xx_web_job_alt_keywords = ['Website']
# <a class="result-title hdrlnk" href="//mywebsite.com/web/123.html" data-id="5966181668">Print business magazine's website management</a>
each_job_link_details = soup.find_all('a', class_='result-title hdrlnk')

for job in each_job_link_details:
    if xx_web_job_alt_keywords in job.get_text():
        #append '//mywebsite.com/web/123.html' to list:xx_good_jobs 
        xx_good_jobs.append(xx_web_job_alt_keywords.get('href',None))
xx_好的工作=[]
xx_网站_工作_alt_关键字=['Website']
# 
每个作业链接详细信息=soup.find所有('a',class='result-title hdrlnk')
对于每个作业链接中的作业详细信息:
如果job.get_text()中的xx_web_job_alt_关键字:
#将“//mywebsite.com/web/123.html”添加到列表中:xx\u好工作
xx_good_jobs.append(xx_web_job_alt_关键字.get('href',None))

您对此有何看法?

或者,您可以使用以下更明确的方法:

注意,我们使用来检查文本中是否有任何关键字。另外,请注意,我们正在降低关键字和文本,以处理案例中的差异

演示:

[1]中的
:从bs4导入BeautifulSoup
在[2]:data=“”
...:     
...:         
...:         
...:     """
在[3]中:soup=beautifulsou(数据,“html.parser”)
在[4]:xx_网络_工作_alt_关键字=['Website']
在[5]中:定义所需链接(标记):
…:“”“筛选文本中具有所需关键字的“标题”链接。”“”
...: 
…:class_attribute=tag.get('class',[])
…:is_header_link=tag.name=='a'和'result title'在class_属性中,以及'hdrlnk'在cl中
…:ass_属性
...: 
…:link_text=tag.get_text()
…:has_keywords=any(link_text中的keyword.lower()。xx_web_job_alt_key中的关键字为lower()
…:字)
...: 
…:返回是\u标题\u链接,具有\u关键字
...: 
在[6]中:xx_good_jobs=[link['href']表示汤中的链接。查找所有(所需的链接)]
在[7]:xx_好工作
Out[7]:[u'//mywebsite.com/web/123.html']

或者,您可以使用以下更明确的方法:

注意,我们使用来检查文本中是否有任何关键字。另外,请注意,我们正在降低关键字和文本,以处理案例中的差异

演示:

[1]中的
:从bs4导入BeautifulSoup
在[2]:data=“”
...:     
...:         
...:         
...:     """
在[3]中:soup=beautifulsou(数据,“html.parser”)
在[4]:xx_网络_工作_alt_关键字=['Website']
在[5]中:定义所需链接(标记):
…:“”“筛选文本中具有所需关键字的“标题”链接。”“”
...: 
…:class_attribute=tag.get('class',[])
…:is_header_link=tag.name=='a'和'result title'在class_属性中,以及'hdrlnk'在cl中
…:ass_属性
...: 
…:link_text=tag.get_text()
…:has_keywords=any(link_text中的keyword.lower()。xx_web_job_alt_key中的关键字为lower()
…:字)
...: 
…:返回是\u标题\u链接,具有\u关键字
...: 
在[6]中:xx_good_jobs=[link['href']表示汤中的链接。查找所有(所需的链接)]
在[7]:xx_好工作
Out[7]:[u'//mywebsite.com/web/123.html']
编辑:

输出:

只需使用和
|
匹配标记中的多个关键字

编辑2:

keyword_lists = [['Website', 'Website', 'business'], ['Website1', 'Website1', 'business1'], ['Website2', 'Website2', 'business2']]
sum(keyword_lists, [])
输出:

编辑:

输出:

只需使用和
|
匹配标记中的多个关键字

编辑2:

keyword_lists = [['Website', 'Website', 'business'], ['Website1', 'Website1', 'business1'], ['Website2', 'Website2', 'business2']]
sum(keyword_lists, [])
输出:


实际问题是什么?所有这些伤了我的眼睛=(我提到过:我想从这个网站上获得一系列链接,这些链接的特点是链接
a
,带有类
结果标题hdrlnk
。然后只看链接的
文本,例如
文本,如果它包含来自
xx\u web\u job\u alt\u关键字'的任何单词,那么把它放在一个名为:
xx\u good\u jobs
的列表中真正的问题是什么?所有这些伤了我的眼睛=(我提到过:我想从这个网站上获得一系列链接,这些链接的特点是链接
a
,带有类
结果标题hdrlnk
。然后只查看链接的
文本,例如
文本,如果它包含来自
xx\u web\u job\u alt\u关键字'的任何单词,那么把它放在一个名为:
xx\u good\u jobs
的列表中如果说有不止几个关键字,你能在这里使用一个列表吗?也许你可以显示出来?@Jshee当然,你可以将关键字列表加入一个正则表达式字符串:
“|”。join(xx_web_job_alt_关键字)
。你能把它添加到你的解决方案中吗?我真的很喜欢你的优雅solution@Jshee
join
将列表放入
re.compile()中
re.compile
我有点困惑我应该在哪里添加它们。让我们假设这里有不止几个关键字,你能在这里使用一个列表吗?也许你可以展示一下?@Jshee当然,你可以将关键字列表加入一个正则表达式字符串:
“|”。join(xx_web_job_alt_关键字)
。你能把它添加到你的解决方案中吗?我真的很喜欢你的优雅solution@Jshee
加入列表
并将其放入
re.compile()
我有点困惑应该将它们添加到
re.compile
import bs4, re
#keywords = ['Website', 'Website', 'business']
html = '''<a class="result-title hdrlnk" href="//mywebsite.com/web/123.html" data-id="5966181668">Print business magazine's website management</a>
        <a class="result-title hdrlnk" href="//mywebsite.com/web/123.html" data-id="5966181668">Print business magazine's website management</a>
        <a class="result-title hdrlnk" href="//mywebsite.com/web/123.html" data-id="5966181668">Print business magazine's website management</a>'''
soup = bs4.BeautifulSoup(html, 'lxml')

keywords = ['Website', 'Website', 'business']
regex = '|'.join(keywords)
for a in soup.find_all('a', class_="result-title hdrlnk", text=re.compile(regex,re.IGNORECASE)):
    print(a.get('href'))
//mywebsite.com/web/123.html
//mywebsite.com/web/123.html
//mywebsite.com/web/123.html
keywords = ['Website', 'Website', 'business']

regex = '|'.join(keywords)
'Website|Website|business'
keyword_lists = [['Website', 'Website', 'business'], ['Website1', 'Website1', 'business1'], ['Website2', 'Website2', 'business2']]
sum(keyword_lists, [])
['Website',
 'Website',
 'business',
 'Website1',
 'Website1',
 'business1',
 'Website2',
 'Website2',
 'business2']