python中的请求返回错误,而手动打开链接工作完美

时间:2017-04-20 12:11:57

标签: python python-requests

import requests

a = 'http://tmsearch.uspto.gov/bin/showfield?f=toc&state=4809%3Ak1aweo.1.1&p_search=searchstr&BackReference=&p_L=100&p_plural=no&p_s_PARA1={}&p_tagrepl%7E%3A=PARA1%24MI&expr=PARA1+or+PARA2&p_s_PARA2=&p_tagrepl%7E%3A=PARA2%24ALL&a_default=search&f=toc&state=4809%3Ak1aweo.1.1&a_search=Submit+Query'
a = a.format('coca-cola')

b = requests.get(a)

print(b.text)
print(b.url)

如果您复制打印的网址并将其粘贴到浏览器中,网站将打开没有问题,但如果您执行requests.get,我会得到一些令牌?错误。我有什么可以做的吗?

VIA requests.get我回来了,但手动做的话没有数据。它说:<html><head><TITLE>TESS -- Error</TITLE></head><body>

1 个答案:

答案 0 :(得分:0)

首先,请务必遵守网站的使用条款和使用政策。

这看起来有点复杂。您需要在整个[网络抓取会话] [1]中保持一定的state。并且,您将需要一个HTML解析器,例如BeautifulSoup

from urllib.parse import parse_qs, urljoin

import requests
from bs4 import BeautifulSoup


SEARCH_TERM = 'coca-cola'

with requests.Session() as session:
    session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}

    # get the current search state
    response = session.get("http://tmsearch.uspto.gov/")
    soup = BeautifulSoup(response.content, "html.parser")
    link = soup.find("a", text="Basic Word Mark Search (New User)")["href"]

    session.get(urljoin(response.url, link))

    state = parse_qs(link)['state'][0]

    # perform a search
    response = session.post("http://tmsearch.uspto.gov/bin/showfield", data={
        'f': 'toc',
        'state': state,
        'p_search': 'search',
        'p_s_All': '',
        'p_s_ALL': SEARCH_TERM + '[COMB]',
        'a_default': 'search',
        'a_search': 'Submit'
    })

    # print search results
    soup = BeautifulSoup(response.content, "html.parser")

    print(soup.find("font", color="blue").get_text())

    table = soup.find("th", text="Serial Number").find_parent("table")
    for row in table('tr')[1:]:
        print(row('td')[1].get_text())

为了演示目的,它会打印第一个搜索结果页面中的所有序列号值。