필자는 파이썬 스크립트를 처음 마쳤습니다. 필자는 선거 자료를 스크랩하는 사람이었습니다. 프로그래밍에 대한 배경 지식이 없으며, 통계 분석을 위해 통계를 사용했고 요즘 일부 스위치를 원할 때 R을 약간 썼습니다. 그러나 웹 사이트 및 기타 소스에서 데이터를 추출하는 Python을 배우고 싶습니다. 지금까지 필자는 Python 튜토리얼을 탐색했을 뿐이 었습니다. O'Reilly의 "Learning Python"은 내 선반에서 기다리고 있습니다. 필자는 다른 사람들의 스크립트에서 영감을 얻고 포함 된 패키지 문서를 탐색하여 다음 스크립트를 작성했습니다.첫 번째 파이썬 스크립트, 스크레이퍼, 추천 환영
기본적으로 찾고있는 것은 일반적인 조언입니다. 스크립트는 작동하지만 불필요한 부분이 있습니까? 다르게 구조해야합니까? 어떤 전형적인 (또는 바보 같은) 초보자 실수가 있습니까?
나는 스크립트 후에 나열한 몇 가지 질문을 직접 작성했습니다. 내가 스크립트를 실행하면
import mechanize
import lxml.html
import csv
site = "http://www.comelec.gov.ph/results/2004natl/2004electionresults_local.aspx"
br = mechanize.Browser()
response = br.open(site)
output = csv.writer(file(r'output.csv','wb'))
br.select_form(name="ctl00")
provinces = br.possible_items("provlist")
for prov in provinces:
br.select_form(name="ctl00")
br["provlist"] = [prov]
response = br.submit()
br.select_form(name="ctl00")
pname = str(br.get_value_by_label("provlist")).strip("[]")
municipalities = br.possible_items("munlist")
for mun in municipalities:
br.select_form(name="ctl00")
br["munlist"] = [mun]
response = br.submit(type="submit", name="ctl01")
html = response.read()
root = lxml.html.fromstring(html)
try:
table = root.get_element_by_id(id="dlistCandidates")
data = [
[td.text_content().strip() for td in row.findall("td")]
for row in table.findall('tr')
]
except KeyError:
print "Results not available yet."
data = [ [ "." for i in range(5) ] ]
br.select_form(name="ctl00")
mname = str(br.get_value_by_label("munlist")).strip('[]')
print pname, mname, data, "\n"
for row in data:
if row:
row.append(pname)
row.append(mname)
output.writerow([s.encode('utf8') if type(s) is unicode else s for s in row])
, 나는 오류 메시지 "DeprecationWarning를 얻을 : [item.name를 self.items의 항목] 이유가 있고 난 그것에 대해 걱정해야합니까
- .?
이제 지방 번호 키를 반복 한 다음 매번 이름을 가져옵니다. 처음에는 사전을 작성하고 반복해야합니까?
"ene"문자를 쉽게 인코딩 할 수 있습니까? N 물결 모양)을 정상적인 N?
"데이터"를 매번 대체하는 방법으로 모든 것을 가장 잘 모으고 마지막에 CSV 파일을 작성하는 방법은 무엇입니까? 그것이 더 나은 해결책이 될 것입니까?
사이트는 각 요청에 응답하는 데 꽤 오래 걸립니다. 모든 데이터를 가져 오는 데는 약 한 시간이 걸립니다. 나는이 스크립트를 실행하고 지방 목록을 concatening하여 속도를 높일 수 있습니다. 하나의 스크립트에서 병렬 요청을 보내는 방법은 무엇입니까? 결국에는 해당 사이트에서 더 많은 데이터를 얻으 려하고 프로세스 속도를 높이는 것이 좋습니다.
나는 BeautifulSoup와 lxml 모듈을 모두 시험해 보았지만 lxml 솔루션을 더 좋아했습니다. 이러한 종류의 작업에 유용한 다른 모듈은 무엇입니까?
내장 된 모듈과 다른 모듈 모두에 대한 문서/도움말 파일에 대한 중앙 레지스터가 있습니까? 나는 그 문서가 사방에 흩어져있는 것처럼 보였고 다소 불편했습니다. 도움 (무언가)을 쓰는 것은 종종 "발견되지 않은 것"을 초래했습니다.
모든 추천과 비평은 대단히 감사합니다. 영어가 모국어가 아니지만 최소한 실수를 저 지르기를 바랍니다.
7. 도움 "을 (를) 찾을 수 없습니다 무엇인가"의 결과로 (뭔가). 어떤 문서도 일반적으로 나쁜 모듈의 흔적이 아닙니다. 그들을 피하는 경향이있다. 또는 문서를 제공하십시오. – smci