Python 2.7 Python,Mechanize |存在注销问题
我正在学习python并使用mechanize运行我的第一个scraper 目标:登录网站,导航到URL列表并返回一段文本,然后将其写入CSV 我使用的代码非常好,但是当我运行列表时,我遇到了一些问题,在10-15行之后,整个html页面会返回,而不是那块文本。一旦错误发生,它将无法正常工作,直到我再次运行该操作,但在10-15后再次遇到障碍 在查看html后,它看起来好像我正在注销,不知道为什么。URL都是合法的,如果我为所有链接单独测试getNum,它似乎工作正常 最后一件事-该网站需要Javascript和cookies才能登录 下面是函数的外观Python 2.7 Python,Mechanize |存在注销问题,python-2.7,mechanize,Python 2.7,Mechanize,我正在学习python并使用mechanize运行我的第一个scraper 目标:登录网站,导航到URL列表并返回一段文本,然后将其写入CSV 我使用的代码非常好,但是当我运行列表时,我遇到了一些问题,在10-15行之后,整个html页面会返回,而不是那块文本。一旦错误发生,它将无法正常工作,直到我再次运行该操作,但在10-15后再次遇到障碍 在查看html后,它看起来好像我正在注销,不知道为什么。URL都是合法的,如果我为所有链接单独测试getNum,它似乎工作正常 最后一件事-该网站需要Ja
def get_Num(link): #takes in a URL, provided by the csv and finds the chunk of text I'm looking for
import urllib2
import cookielib
import urllib
import requests
import mechanize
# Browser
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_refresh(False)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
# The site we will navigate into, handling it's session
br.open('https://www.website.com/login')
#select the first form
br.select_form(nr=0)
#user credentials
br['session_key'] = login
br['session_password'] = pw
# Login
br.submit()
print 'logged in'
#open link
br.open(link)
html = br.response().read()
position1 = html.find('text')
position2 = html.find('>',position1)
targetNumber = html[position1:position2]
return targetNumber
def get_Info(inputFile,outputFile): # takes a CSV and runs getNum for ever url and then writes the whole thing to a csv
import urllib2
import re
import csv
with open(inputFile, "rb") as csvinput:
with open(outputFile, 'w+') as csvoutput:
reader = csv.reader(csvinput)
writer = csv.writer(csvoutput)
for rowNum, line in enumerate(reader):
vv = getNum(str(line[1]))
line.append(vv)
仅供参考-您不需要用open语句嵌套您的
。您可以这样做:将open(inputFile,“rb”)作为csvinput,将open(outputFile,'w+')作为csvoutput:
放在一行上。谢谢,我会把它清理干净的