鱼C论坛

 找回密码
 立即注册
查看: 655|回复: 4

[已解决]关于爬虫的一个问题

[复制链接]
发表于 2019-5-14 20:36:30 | 显示全部楼层 |阅读模式
5鱼币
错误:
  1. 请输入网址:https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6
  2. Traceback (most recent call last):
  3.   File "F:\Py\课堂练习.py", line 37, in <module>
  4.     the_list = spider.load_page()
  5.   File "F:\Py\课堂练习.py", line 29, in load_page
  6.     item_list = pattern.findall(self.file)
  7. TypeError: cannot use a string pattern on a bytes-like object
复制代码


程序:
  1. # _*_ coding:utf-8_*_
  2. import urllib.request
  3. import re

  4. class Spider:
  5.     '''
  6.        微博热搜的一个爬虫类
  7.     '''
  8.     def load_page(self):
  9.         user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'
  10.         headers = {'User-Agent':user_agent}

  11.         self.html = input('请输入网址:')
  12.         self.req = urllib.request.Request(self.html,headers = headers)

  13.         self.response = urllib.request.urlopen(self.req)
  14.         self.file = self.response.read()

  15.         # (将解读出来的代码按gbk格式进行解压之后再按utf-8格式压缩,
  16.         #   防止解读出来的代码和本地编码方式不一样而出现乱码)
  17.         #self.new_file = self.file.decode('gbk').encode('utf-8')

  18.         #用正则表达式过滤文字
  19.         
  20.         pattern = re.compile(r'<a.*?target="_blank">(.*?)</a>',re.S)
  21.         
  22.         #找到所有匹配表达式的pattern后放入一个列表中
  23.         
  24.         item_list = pattern.findall(self.file)
  25.         
  26.         return item_list


  27. # main
  28. if __name__ == "__main__":
  29.     spider = Spider()
  30.     the_list = spider.load_page()
  31.     for i in the_list:
  32.         print (i)
  33.    
复制代码


最佳答案
2019-5-14 20:36:31
self.file = self.response.read()  这个是二进制流,这里需要解码,然后后面的正则才可起作用。
如果不解码,后面的匹配语句需要修改。最后匹配出还是二进制数据,还是需要解码。

最佳答案

查看完整内容

self.file = self.response.read() 这个是二进制流,这里需要解码,然后后面的正则才可起作用。 如果不解码,后面的匹配语句需要修改。最后匹配出还是二进制数据,还是需要解码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-14 20:36:31 | 显示全部楼层    本楼为最佳答案   
self.file = self.response.read()  这个是二进制流,这里需要解码,然后后面的正则才可起作用。
如果不解码,后面的匹配语句需要修改。最后匹配出还是二进制数据,还是需要解码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-15 07:52:24 | 显示全部楼层
[attachimg]111007[/attachimg
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-15 07:59:03 From FishC Mobile | 显示全部楼层
findall后面要跟字符串,你的不是,所以报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-15 08:14:57 | 显示全部楼层
  1. # _*_ coding:utf-8_*_
  2. '''
  3. py3.7  pycharm
  4. '''
  5. import urllib.request
  6. import re

  7. class Spider:
  8.     def load_page(self):
  9.         
  10.         user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'
  11.         headers = {'User-Agent': user_agent}
  12.         html = 'https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6'
  13.         
  14.         req = urllib.request.Request(html, headers=headers)
  15.         response = urllib.request.urlopen(req)
  16.         
  17.         file = response.read().decode('utf-8')
  18.         pattern = re.compile(r'<a.*?target="_blank">(.*?)</a>', re.S | re.M)
  19.         item_list = pattern.findall(file)
  20.         return item_list

  21. if __name__ == "__main__":
  22.     spider = Spider()
  23.     the_list = spider.load_page()
  24.     for i in the_list:
  25.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-14 00:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表