美文网首页python 爬虫@IT·互联网Python爬虫作业
二期Python爬虫作业No.2 bs4和Xpath的差异: 以

二期Python爬虫作业No.2 bs4和Xpath的差异: 以

作者: 只是不在意 | 来源:发表于2017-05-25 10:43 被阅读295次

    BeautifulSoup和Xpath都是爬虫工具。我的认知里,掌握这两个工具,就能把爬虫最基本的功能应用上,其他的加请求头,写入数据,还有遥远的scrapy(还没学),都是在此基础上发挥的。

    Beautiful知识点,我个人觉得最重要的是find_all/find和select的区别,select可以一层层的找标签,适合小白面对复杂的情况。

    soup = BeautifulSoup(html_doc)
    print soup.find_all('title')  #提取'title'标签的所有列表
    print soup.find_all('p',class_='title') #提取含‘p'标签的且'class'属性是'title'的所有列表
    print soup.find(id="link2") #提取id的'属性是"link2"的一个列表
    print soup.select('tag.name1>tag.name2')  #提取tag.name1标签下的tag.name2标签
    soup.select('#****')
    

    Xpath知识点,xpath就".xpath"一个命令,我自己反而觉得轻松一点。(但也不代表没有坑...)

    ·在网页源代码中右键,Copy XPath
    ·// 定位根节点
    ·/ 往下层寻找
    ·提取文本内容:/text()
    ·提取属性内容: /@xxxx
    ·以相同的字符开头 starts-with(@属性名称, 属性字符相同部分)
    

    拿个蚂蚁短租的网站爬虫做例子,只选取成都的房间数,可以看到,在font class那级,但我觉得设定字体语句的不一定是唯一,所以向上一级选取。


    1.png

    也是写的很简单,主要对比一下bs4和xpath的语句:

    import requests
    from lxml import etree
    from bs4 import BeautifulSoup #其他都要一起,就这个是bs独有的,不用bs就不用import了。
    import random
    
    #请求头也是放之四海皆准的:
    def getReqHeaders():
        user_agents = ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"]
        user_agent = random.choice(user_agents)
        req_headers = {'User-Agent': user_agent}
        return req_headers
    
    找到网页的url和一级请求也是一样的:
    url='http://www.mayi.com/chengdu/?d1=2017-05-31&d2=2017-06-02'
    html=requests.get(url,headers=getReqHeaders())
    
    #BeautifulSoup的写法,非唯一:
    soup=BeautifulSoup(html,'html.parser')
    number = soup.find_all(name='span',class_="ml10").text[0]
    
    #Xpath的写法,非唯一:
    selector=etree.HTML(html)
    number=selector.xpath('//*[@id="totalCount"]/text()')[0]
    
    #出来的结果是一样的
    print number
    print(number.font.text) #bs爬出来的是在font里的,所以再提取一次。在我之前爬煎蛋网的时候,因为段子是用< p>分隔的,所以也是写成print link.p.get_text()。
    

    Xpath我很快就做出来了,但bs4我折腾很久,拿给yaung大神看,然后他告诉我把ml10看成m110了,所以标签也写错了....错了....错了....
    所以从这个角度来说,xpath也比较方便吧,直接copy肯定不会有错。
    总而言之,爬虫的步骤都是获得网页地址—〉解析网页代码—〉爬取网页内容—〉存储数据,基本法是不变的。
    又完成了一篇小白科普文,大家都是这么过来的!(只不过有人冬眠期比较长,比如我...)

    相关文章

      网友评论

      本文标题:二期Python爬虫作业No.2 bs4和Xpath的差异: 以

      本文链接:https://www.haomeiwen.com/subject/gsfgxxtx.html