如何使用python为网站提供输入

时间:2015-01-01 12:30:23

标签: python html python-3.x beautifulsoup html-parsing

大家好我是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)

1 个答案:

答案 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,则应考虑使用计划任务。