Python 2.7 从登录网站抓取网页

标签 python authentication web-scraping web

我想从 https 网站上进行网络抓取,我必须在该网站上登录才能获取信息。

这是我的(第一部分)代码:

import requests
from lxml import html
import urllib2
from bs4 import BeautifulSoup
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
import MySQLdb

url = 'https://www.opten.hu/'
values = {'user': 'MYUSERNAME',
          'password': 'MYPASSWORD'}

r = requests.post(url, data=values)

params = {'Category': 6, 'deltreeid': 6, 'do': 'Delete Tree'}
url = 'https://www.opten.hu/cegtar/cegkivonat/0910000511'

result = requests.get(url, data=params, cookies=r.cookies)

print result

如果我运行它并打印结果,我会得到“Response [200]”,所以没问题,服务器成功响应了 http 请求。

在我想浏览此网站上的其他菜单项后,我可以在其中找到对我有值(value)的信息。 (称为 url)

我怎样才能抓取这个页面,我的代码有什么问题?

import requests
from lxml import html
import urllib2
from bs4 import BeautifulSoup
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
import MySQLdb

url = 'https://www.opten.hu/'
values = {'user': 'MYUSERNAME',
          'password': 'MYPASSWORD'}

r = requests.post(url, data=values)

params = {'Category': 6, 'deltreeid': 6, 'do': 'Delete Tree'}
url = 'https://www.opten.hu/cegtar/cegkivonat/0910000511'

result = requests.get(url, data=params, cookies=r.cookies)

print result

page = urllib2.urlopen(url).read()
soup = BeautifulSoup(page)

print soup

最佳答案

您正在使用 urllib2 阅读内容。它会向 url 发出另一个请求以获取数据,但不会使用您在上一个请求中获得的 cookie。

试试下面的代码。我已经使用 requests.Session 来保存 cookie,您现在不需要 urllib2

# Author: Swapnil Mahajan
import requests
from lxml import html
import urllib2
from bs4 import BeautifulSoup
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
import MySQLdb

url = 'https://www.opten.hu/ousers/loginuser'
values = {'user': 'MYUSERNAME',
          'password': 'MYPASSWORD'}

session = requests.Session()

r = session.post(url, data=values)

params = {'Category': 6, 'deltreeid': 6, 'do': 'Delete Tree'}
url = 'https://www.opten.hu/cegtar/cegkivonat/0910000511'

result = session.get(url, data=params)

soup = BeautifulSoup(result.text, "lxml")
print soup

关于Python 2.7 从登录网站抓取网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44645311/

相关文章:

python - 在 VS Code 中设置 python 自动完成

python - 如何创建空的 numpy 数组来存储不同类型的数据

c# - JWT token 如何拆分声明和签名

python - 无法使用请求从网站上抓取不同公司的链接

python - 在 scrapy 中抓取 json 响应

python - 如何使用 Bio.Entrez 提取完整的 PMC 文章标题和摘要列表?

python - 在Python中分割多字标签的有效方法

python - 如何正确迭代两列并弹出数据与新 df 匹配的行

c++ - 如何检索 SID 的字节数组

SharePoint 基础结构更新身份验证问题