大家好我是python的新手。请帮我解决这个问题。
http://www.example.com/ratings/ratings-rationales.jsp?date=true&result=true
在此链接中,我必须先选择日期,然后评级公司会将其出版物列为链接。现在我想搜索一个包含我感兴趣的单词的链接,然后说#34; stable"。我使用python 3.4.2
尝试了以下内容from bs4 import BeautifulSoup
from urllib.parse import urljoin
import requests
url = "http://www.example.com/ratings/ratings-rationales.jsp?date=true&result=true"
r = requests.get(url)
soup = BeautifulSoup(r.content)
example_links = lambda tag: getattr(tag, 'name', None) == 'a' and 'stable' in tag.get_text().lower() and 'href' in tag.attrs
results = soup.find_all(example_links)
result_links = [urljoin(url, tag['href']) for tag in results]
print (result_links)
这不打印任何东西。我在下面看到结果
>>>
[]
显然我没有给出日期作为输入
1.如何在今天的日期输入日期和日期? (显然要定期检查包含感兴趣的词的链接的更新,这将在以后的时间提出问题)
例如,从日期开始:2014年12月31日至今:2014年12月31日作为输入
是我需要的超链接输出。
任何建议都会非常有用。提前致谢
这是更新后的代码仍然无法获得结果。 >>> []
是输出
from datetime import datetime
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import requests
#Getting the current date
today = datetime.today()
#For the sake of brevity some parameters are missing on the payload
payload = {
'selArchive': 1,
'selDay': 31,
'selMonth': 12,
'selYear': 2014,
'selDay1': 31,
'selMonth1': 12,
'selYear1': 2014,
'selSector': '',
'selIndustry': '',
'selCompany': ''
}
example_url = "http://www.example.com/
r = requests.post(example_url, data=payload)
rg = requests.get(example_url)
soup = BeautifulSoup(rg.content)
crisil_links = lambda tag: getattr(tag, 'name', None) == 'a' and 'stable' in tag.get_text().lower() and 'href' in tag.attrs
results = soup.find_all(example_links)
result_links = [urljoin(url, tag['href']) for tag in results]
print (result_links)
答案 0 :(得分:2)
您应该为此特定网站(this link执行POST而不是GET,了解如何使用参数形成发布请求。)
检查此示例:
from datetime import datetime
from urllib.parse import urljoin
from bs4 import BeautifulSoup
import requests
#Getting the current date
today = datetime.today()
#Here I'm only passing from and to dates (current date) and the industry parameter
payload = {
'selDay': 31,
'selMonth': 12,
'selYear': 2014,
'selDay1': 31,
'selMonth1': 12,
'selYear1': 2014,
'selIndustry': '',
'txtPhrase': '',
'txtInclude': '',
'txtExclude': '',
'selSubServices': 'ALL',
'selServices': 'all',
'maxresults': 10,
'pageno': 1,
'srchInSrchCol': '01',
'sortOptions': 'date',
'isSrchInSrch': '01',
'txtShowQuery': '01',
'tSearch': 'Find a Rating',
'txtSearch': '',
'selArchive': 1,
'selSector': 148,
'selCompany': '',
'x': 40,
'y': 11,
}
crisil_url = "http://www.crisil.com/ratings/ratings-rationales.jsp?result=true&Sector=true"
r = requests.post(crisil_url, data=payload)
soup = BeautifulSoup(r.content)
crisil_links = lambda tag: getattr(tag, 'name', None) == 'a' and 'stable' in tag.get_text().lower() and 'href' in tag.attrs
results = soup.find_all(crisil_links)
result_links = [urljoin(crisil_url, tag['href']) for tag in results]
print (result_links)
您需要检查您要过滤的行业的ID,因此请务必通过Inspect Element检查它们,在浏览器上选择行业选择框。
之后,您将获得响应并通过BeautifulSoup进行解析,就像您现在所做的那样。
定期检查 要定期检查,如果使用Linux,则应考虑使用crontab,如果使用Windows,则应考虑使用计划任务。