您的位置:首页 > 编程语言 > Python开发

python 模拟查询请求并处理返回结果

2014-09-09 11:26 537 查看
这是上周的任务了,今天总结下,任务描述如下,在数据表中存在查询词和城市id,需要利用查询词和城市名拼接成正确的url向某网站发送查询请求并对查询结果进行简单的解析,这里涉及城市名(中文)到城市拼音和缩写的转换问题,该转换本身并不复杂,但涉及中文处理,确实费了一番周折,对Python的编码问题还需要再进行深入的研究。下面主要说一下请求查询的过程,主要代码如下:

query = urllib.quote(line_list[0])

url = "http://"+short+".m***t***.com/s/" +query+"/all/all/hot"

conn = httplib.HTTPConnection("www.m***t***.com")

conn.request("GET",url)

r1 = conn.getresponse()

s1=r1.read()

hp1 = MyHTMLParser1()

hp1.feed(s1)

首先利用urllib.quote()方法对查询词进行编码,然后根据url的格式拼接成正确的url,再利用httplib.HTTPConnection方法跟服务器建立连接,之后向服务器发送get请求,最后利用MyHTMLParser()类对返回结果进行解析和处理,这里MyHTMLParser1()类继承HTMLParser,继承后需要可以根据需要重写其handle_starttag方法和handle_data方法:

class MyHTMLParser1(HTMLParser):

10 def __init__(self):

11 HTMLParser.__init__(self)

12 self.flag = 0

13

14 def handle_starttag(self, tag, attrs):

15 if tag == "span":

16 if len(attrs) == 0: pass

17 else:

18 for (variable, value) in attrs:

19 if variable == "class" and value=="count":

20 self.flag= 1

21 elif variable == "class" and value == "no-result-content":

22 self.flag = 0

23 #def handle_data(self,data):

24 #print self.flag

另外一种发送查询请求的方法如下:

quanpin = ""

107 if city_quanpin_dict.has_key(city_name2):

108 quanpin = city_quanpin_dict[city_name2]

109 if quanpin == "":

110 continue

111 url = "http://t.d***p***.com/"+quanpin+"?q="+query

112 i_headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1)Gecko/20090624 Firefox/3.5", "Accept": "text/plain"}

113 req = urllib2.Request(url,headers=i_headers)

114 re_data = urllib2.urlopen(req)

115 s2 = re_data.read()

116 hp2 = MyHTMLParser2()

117 hp2.feed(s2)

这种方法需要添加请求头来获得查询结果,对查询结果的处理方法同上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: