python爬虫之BeautifulSoup4遇坑记

简介:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from urllib import request
from bs4 import BeautifulSoup

html = request.urlopen("https://movie.douban.com/")
bs = BeautifulSoup(html, "lxml-xml")
print(bs.title)


到目前为止,我知道的py36和37中的parser只能选择html-parser和html5lib而lxml和lxml-xml不能用


先说下经过:

1.run

2.报错如下


D:\Users\lunjiawang\wlj\devkit\anaconda\install\python.exe D:/Users/lunjiawang/PycharmProjects/script/src/Practice.py
Traceback (most recent call last):
  File "D:/Users/lunjiawang/PycharmProjects/script/src/Practice.py", line 7, in <module>
    bs = BeautifulSoup(html, "lxml-xml")
  File "D:\Users\lunjiawang\wlj\devkit\anaconda\install\lib\site-packages\bs4\__init__.py", line 198, in __init__
    % ",".join(features))
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml-xml. Do you need to install a parser library?

Process finished with exit code 1

3.第一反应 Do you need to install a parser library?这句导致我以为自己的lxml包没有安装,故使用


pip install lxml

因为我是用的conda所以比较方便,但是这导致一个信任问题:conda真的把我要的包导进来了吗?在安装完之后还不行的情况下,我产生了这样的想法,所以开始google


4.google出来的答案基本一致:lxml版本不兼容(后来想想话是没说错,倒是容易产生迷惑),根据网上的大神(基本都是stackOverflow,github啥的),下载4.0.0的版本,用的amd64 cp35\36下载,然后用pip install 文件目录安装。不行,报错原因简单:not support in this platform

8e32d7833f1b4623bed2fc294c6ba01aa5ed9a53

5.显而易见,平台不支持,当时的想法是系统平台,而不是py平台,继续找该问题的方法

6.直到有个网友说win10 py35需要下载3.7.2之前的版本,一脸懵逼,然后我想,既然4.0.0不行,那么py35和我的37应该差别不大,有可能还是lxml版本问题(没错啊,就是迷惑了),所以下了3.7的(其实在下载4.0.0的时候我就尝试下了3.8也不行,心想不会就一墙之隔吧),满心激动,安装-报错,此时都有点郁闷了

7.继续找答案,在StackOverflow上有个家伙说他是py37的下载4.2.5 cp37版本的lxml就好了。嗯?cp37?难道?35\36\37都是lxml版本的意思?对啊,吐血,这样说,我37之前一直下载4.2.5之前的版本不是找死吗?因为没有cp37啊。

8到此未知,虽然问题没有解决,但是发现自己的方向找错了。我的lxml版本没问题,有问题的是???是什么?


9.继续寻找,到源码看看吧,发现有如下

:param features: Desirable features of the parser to be used. This
        may be the name of a specific parser ("lxml", "lxml-xml",
        "html.parser", or "html5lib") or it may be the type of markup
        to be used ("html", "html5", "xml"). It's recommended that you
        name a specific parser, so that Beautiful Soup gives you the
        same results across platforms and virtual environments.
咦,好像parser有好多个,不仅仅只有lxml嘛。难道?这个跟py版本有关?为了验证这个想法,继续google


10.狂输:

py37 Couldn't find a tree builder with the features you requested

老天不负苦心人,终于有个CSDN老哥ssITt猿写了个py36 Couldn't find a tree builder with the features you requested:的文章,既然找不到37的就用36试试呗,里面给了方法:


在报错代码中把函数参数中所有的"lxml"改成"html.parser"
例子:

bs = BeautifulSoup(r, 'lxml')
 #改成 bs = BeautifulSoup(r, 'html.parser')


11.调整,run 成功了


总结:这个过程,我一直在抱怨python怎么这么麻烦,包也没有人管理,下载个三方包还需要自己手动pip,依赖没人管理,下错了就给你error,社区(包括网站),更新的是勤快,但是有py、pip更新的勤快嘛?说不定下周我这个parser又不管用,又不知道会坑死多少人

话说回来,从这个小bug中发现自己的思路还是有点问题:首先,遇到问题马上google,这个不太好,最好的方法就是源码,看最底层的东西,如果是刚学习一个工具、语言、软件啥的,最好是从doc里面汲取最官方的东西(只是全英文理解起来不是很容易,但是很详细很完整,大家可以看我其他博客里面对es的官网翻译,最近也在逼自己看原文);其次,动手能力差,其实很早就看到有很多parser,但是因为没想到跟这个有关就没有一个个试,总期待别人给现成的答案。再者,独立思考的能力也很重要,很明显这次的逻辑应该是:conda已经帮我安装了lxml包,但是程序报包找不到,说明程序这个报错只是表象,而不能轻易相信包的版本有问题。然后应该看前面一句报错:


Couldn't find a tree builder with the features you requested: lxml-xml

找不到lxml-xml这个features,那么我的包没问题,只是features有问题,此时进入源码发现有很多features,换一个试试就完了


哎,逻辑太重要,我总是想的比较复杂,归根结底还是因为没有很好的独立思考的能力,

愿与大家共勉共进步


相关文章
|
12天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
16天前
|
数据采集 Python
【python】爬虫-西安医学院-校长信箱
本文以西安医学院-校长信箱为基础来展示爬虫案例。来介绍python爬虫。
【python】爬虫-西安医学院-校长信箱
|
22天前
|
数据采集 安全 Python
python并发编程:Python实现生产者消费者爬虫
python并发编程:Python实现生产者消费者爬虫
24 0
python并发编程:Python实现生产者消费者爬虫
|
2天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
11 0
|
5天前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
17天前
|
数据采集 存储 前端开发
Python爬虫如何快速入门
写了几篇网络爬虫的博文后,有网友留言问Python爬虫如何入门?今天就来了解一下什么是爬虫,如何快速的上手Python爬虫。
20 0
|
30天前
|
数据采集 存储 Web App开发
一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧
一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧
|
1月前
|
数据采集 JSON 数据格式
python爬虫之app爬取-charles的使用
charles 基本原理,charles抓包,分析,重发。
53 0
|
2月前
|
数据采集 存储 架构师
上进计划 | Python爬虫经典实战项目——电商数据爬取!
在如今这个网购风云从不间歇的时代,购物狂欢持续不断,一年一度的“6.18年中大促”、“11.11购物节”等等成为了网购电商平台的盛宴。在买买买的同时,“如何省钱?”成为了大家最关心的问题。 比价、返利、优惠券都是消费者在网购时的刚需,但在这些“优惠”背后已产生灰色地带。
|
4月前
|
数据采集 Python
Python爬虫:实现爬取、下载网站数据的几种方法
Python爬虫:实现爬取、下载网站数据的几种方法
200 1