我能够抓住这些网站表没有问题;但是,为了获得对我自定义的表的访问,我需要首先登录然后刮,因为如果我没有得到默认输出。我觉得我很亲密,但我对python相对较新。期待更多地了解机械化和BeautifulSoup。
似乎正在正确登录,因为如果我故意在下面输入错误的密码,我会收到“密码不正确”的错误,但是如何将登录信息连接到我要删除的网址?
from bs4 import BeautifulSoup
import urllib
import csv
import mechanize
import cookielib
cj = cookielib.CookieJar()
br = mechanize.Browser()
br.set_cookiejar(cj)
br.open("http://www.barchart.com/login.php")
br.select_form(nr=0)
br.form['email'] = 'username'
br.form['password'] = 'password'
br.submit()
#print br.response().read()
r = urllib.urlopen("http://www.barchart.com/stocks/sp500.php?view=49530&_dtp1=0").read()
soup = BeautifulSoup(r, "html.parser")
tables = soup.find("table", attrs={"class" : "datatable ajax"})
headers = [header.text for header in tables.find_all('th')]
rows = []
for row in tables.find_all('tr'):
rows.append([val.text.encode('utf8') for val in row.find_all('td')])
with open('snp.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerow(headers)
writer.writerows(row for row in rows if row)
#from pymongo import MongoClient
#import datetime
#client = MongoClient('localhost', 27017)
print soup.table.get_text()
答案 0 :(得分:2)
我不确定您是否确实需要登录才能检索问题中的网址;无论登录与否,我都会得到相同的结果。
但是,如果您确实需要登录才能访问其他数据,则问题是您使用mechanize
登录,然后使用urllib.urlopen()
访问该页面。这两者之间没有任何关联,因此mechanize
收集的任何会话数据在发出请求时都无法用于urlopen
。
在这种情况下,您无需使用urlopen()
,因为您可以打开网址并使用mechanize
访问HTML:
r = br.open("http://www.barchart.com/stocks/sp500.php?view=49530&_dtp1=0")
soup = BeautifulSoup(r.read(), "html.parser")