gpt4 book ai didi

USPTO 网站抓取的 Python 发布请求

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:01 25 4
gpt4 key购买 nike

我正在尝试从 http://portal.uspto.gov/EmployeeSearch/ 中抓取数据网站。我在浏览器中打开网站,点击网站“按组织搜索”部分中的“搜索”按钮,查找发送到服务器的请求。

当我在我的程序中使用 python 请求库发布相同的请求时,我没有得到我期望的结果页面,但我得到了相同的搜索页面,上面没有员工数据。我已经尝试了所有变体,似乎没有任何效果。

我的问题是,我应该在我的请求中使用什么 URL,我是否需要指定 header (也尝试过,根据请求在 Firefox 开发人员工具中查看复制的 header )或其他东西?

下面是发送请求的代码:

import requests
from bs4 import BeautifulSoup

def scrape_employees():
URL = 'http://portal.uspto.gov/EmployeeSearch/searchEm.do;jsessionid=98BC24BA630AA0AEB87F8109E2F95638.prod_portaljboss4_jvm1?action=displayResultPageByOrgShortNm&currentPage=1'

response = requests.post(URL)

site_data = response.content
soup = BeautifulSoup(site_data, "html.parser")
print(soup.prettify())


if __name__ == '__main__':
scrape_employees()

最佳答案

您需要的所有数据都在 form 标签中:enter image description here

action 是您向服务器发帖时的 url。

input 是您需要发送到服务器的数据。 {名称:值}

import requests, bs4, urllib.parse,re

def make_soup(url):
r = requests.get(url)
soup = bs4.BeautifulSoup(r.text, 'lxml')
return soup

def get_form(soup):
form = soup.find(name='form', action=re.compile(r'OrgShortNm'))
return form

def get_action(form, base_url):
action = form['action']
# action is reletive url, convert it to absolute url
abs_action = urllib.parse.urljoin(base_url, action)
return abs_action

def get_form_data(form, org_code):
data = {}
for inp in form('input'):
# if the value is None, we put the org_code to this field
data[inp['name']] = inp['value'] or org_code

return data

if __name__ == '__main__':
url = 'http://portal.uspto.gov/EmployeeSearch/'
soup = make_soup(url)
form = get_form(soup)
action = get_action(form, url)
data = get_form_data(form, '1634')

# make request to the action using data

r = requests.post(action, data=data)

关于USPTO 网站抓取的 Python 发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42613938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com