|
5鱼币
错误:
- 请输入网址:https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6
- Traceback (most recent call last):
- File "F:\Py\课堂练习.py", line 37, in <module>
- the_list = spider.load_page()
- File "F:\Py\课堂练习.py", line 29, in load_page
- item_list = pattern.findall(self.file)
- TypeError: cannot use a string pattern on a bytes-like object
复制代码
程序:
- # _*_ coding:utf-8_*_
- import urllib.request
- import re
- class Spider:
- '''
- 微博热搜的一个爬虫类
- '''
- def load_page(self):
- user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'
- headers = {'User-Agent':user_agent}
- self.html = input('请输入网址:')
- self.req = urllib.request.Request(self.html,headers = headers)
- self.response = urllib.request.urlopen(self.req)
- self.file = self.response.read()
- # (将解读出来的代码按gbk格式进行解压之后再按utf-8格式压缩,
- # 防止解读出来的代码和本地编码方式不一样而出现乱码)
- #self.new_file = self.file.decode('gbk').encode('utf-8')
- #用正则表达式过滤文字
-
- pattern = re.compile(r'<a.*?target="_blank">(.*?)</a>',re.S)
-
- #找到所有匹配表达式的pattern后放入一个列表中
-
- item_list = pattern.findall(self.file)
-
- return item_list
- # main
- if __name__ == "__main__":
- spider = Spider()
- the_list = spider.load_page()
- for i in the_list:
- print (i)
-
复制代码
self.file = self.response.read() 这个是二进制流,这里需要解码,然后后面的正则才可起作用。
如果不解码,后面的匹配语句需要修改。最后匹配出还是二进制数据,还是需要解码。
|
最佳答案
查看完整内容
self.file = self.response.read() 这个是二进制流,这里需要解码,然后后面的正则才可起作用。
如果不解码,后面的匹配语句需要修改。最后匹配出还是二进制数据,还是需要解码。
|