如何使用 python 向网站提供输入
How to give inputs to a website using python
大家好,我是 python 的新手。请帮我解决这个问题。
http://www.example.com/ratings/ratings-rationales.jsp?date=true&result=true
在这个link中,我必须先选择日期,然后评级公司会将其出版物列为links。现在我想搜索一个 link,其中包含我感兴趣的单词 "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.如何输入起止日期为今天的日期? (显然要定期检查 links 的更新是否包含感兴趣的单词,这将在以后出现问题)
例如,从日期:31-12-2014 到日期:31-12-2014 作为输入
是我需要的输出作为 hyperlink。
任何建议都会非常有用。提前致谢
这是更新后的代码,我仍然无法得到结果。 >>> []
是输出
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)
您应该为这个特定站点执行 POST 而不是 GET(this link 关于如何形成带参数的 post 请求)。
检查这个例子:
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 检查它们,select在浏览器的 select 行业框中输入。
之后,您将像现在一样通过 BeautifulSoup 获得响应并进行解析。
定期检查:
要定期检查,如果使用 Linux/Unix 则应考虑 crontab,如果使用 Windows.
则应考虑计划任务
大家好,我是 python 的新手。请帮我解决这个问题。
http://www.example.com/ratings/ratings-rationales.jsp?date=true&result=true
在这个link中,我必须先选择日期,然后评级公司会将其出版物列为links。现在我想搜索一个 link,其中包含我感兴趣的单词 "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.如何输入起止日期为今天的日期? (显然要定期检查 links 的更新是否包含感兴趣的单词,这将在以后出现问题)
例如,从日期:31-12-2014 到日期:31-12-2014 作为输入
是我需要的输出作为 hyperlink。
任何建议都会非常有用。提前致谢
这是更新后的代码,我仍然无法得到结果。 >>> []
是输出
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)
您应该为这个特定站点执行 POST 而不是 GET(this link 关于如何形成带参数的 post 请求)。
检查这个例子:
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 检查它们,select在浏览器的 select 行业框中输入。
之后,您将像现在一样通过 BeautifulSoup 获得响应并进行解析。
定期检查: 要定期检查,如果使用 Linux/Unix 则应考虑 crontab,如果使用 Windows.
则应考虑计划任务