如何使用 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.

则应考虑计划任务