请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

微信公众号:
crossincode
 找回密码
 立即加入
查看: 527|回复: 1

页面不存在,统一转入一个导航页面,请问如何跳出?

[复制链接]

1

主题

0

好友

5

积分

新手上路

Rank: 1

发表于 2019-5-24 17:31:36 |显示全部楼层
本帖最后由 Jacky 于 2019-5-24 17:36 编辑

新手刚接触爬虫,因为第一页和后续页面的规则不一致,我是这样处理的:
  1. def page_start(*page_start_num*):
  2. ​    if page_start_num == 1:
  3. ​        url = base_url
  4. ​        headers = {
  5. ​            'Referer': url,
  6. ​            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36',
  7. ​            'cookie': 'UM_distinctid=16adf1c99906c-0650f771e023bc-353166-1fa400-16adf1c999334f; CNZZDATA1255357127=703661195-1558519406-%7C1558519406',
  8. ​        }
  9. ​    else:
  10. ​        url = base_url[0:-5] + '_' + str(page_start_num) + '.html'
  11. ​        headers = {
  12. ​            'Referer': url,
  13. ​            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36',
  14. ​            'cookie': 'UM_distinctid=16adf1c99906c-0650f771e023bc-353166-1fa400-16adf1c999334f; CNZZDATA1255357127=703661195-1558519406-%7C1558519406',
  15. ​        }
  16. ​    print('当前页面路径:%s' % url)
  17. ​    return url, headers


  18. def get_page(*url*, *headers*):
  19. ​    try:
  20. ​        response = requests.get(url, *headers*=headers)
  21. ​        response.encoding = 'utf-8'
  22. ​        if response.status_code == 200:
  23. ​            return response.text
  24. ​    except RequestException:
  25. ​        print('请求网页失败')
  26. ​        return None

  27. def parse_page(*html*):
  28. ​        soup = BeautifulSoup(html, 'lxml')
  29. ​        *# print(soup.prettify())*
  30. ​        print(soup.title.string)
  31. ​        title = soup.title.string
  32. ​        img_info = soup.find_all(*name*='img', *attrs*='content_img')
  33. ​        for i in range(len(img_info)):
  34. ​            pic = img_info.attrs['src']
  35. ​            yield{
  36. ​                'title': title,
  37. ​                'url': pic,
  38. ​                'num': i+1
  39. ​            }
复制代码
后续有多少页通过“page_start_num”控制。
代码很丑陋,但是可以运行。但是有时会遇到网站本身的问题,有些页面不存在。
网站的处理方式是不存在的页面,都转到一个专门的导航页面。
这时,代码运行会报错如下:
  1.    File "C:\Python\Python37\lib\site-packages\bs4\__init__.py", line 245, in __init__
  2.     elif len(markup) <= 256 and (
  3. TypeError: object of type 'NoneType' has no len()
复制代码
抓取会终止,请问各位,要如何处理这种异常?如何让代码跳过这个url,继续抓取后续的url?
谢谢!


回复

使用道具 举报

158

主题

37

好友

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2019-5-24 19:40:03 |显示全部楼层
找到报错的位置,放在try里面,用异常处理跳过即可

你报错没截全,看不出报错在哪里,看起来是 beautifulsoup 处理那里报错的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|Archiver|手机版|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2020-10-1 11:34 , Processed in 0.055094 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部