美文网首页Python
python爬取当当网图书信息

python爬取当当网图书信息

作者: C_Z_Q_ | 来源:发表于2019-10-25 19:29 被阅读0次
    数据提取

    使用Python提取本地HTML文件中的内容

    获取HTML文件中的内容 读取这个HTML文件,然后获得这个文件所有内容,在进行提取
    读取文件open()

    with open('ht1.html', 'r', encoding='UTF-8') as f:
        html_data = f.read()
        print(html_data)
    

    XML 可扩展标记语言

    Xpath XML path language 用于提取 文档中的元素
    使用Lxml库来实现xpath语法提取
    安装 Lxml

    pip install Lxml
    
    • 从html_data中提取 欢迎来到王者这个标题
    from lxml import html
    selector = html.fromstring(html_data)
    h1 = selector.xpath('/html/body/h1/text()')
    print(h1)
    
    • 获取p内容
    selector = html.fromstring(html_data)
    p = selector.xpath('/html/body/p/text()')
    print(p)
    

    总结:以上使用xpath用起来比较麻烦,类似于绝对路径
    我们常常使用下面的语法格式
    1.获取文本(也就是获取标签中的内容,标签对中间夹的部分)

    < a href=" www.baidu.com">点击跳转至百度</a>
    //代表从任意位置出发 []内的属性 是对前面标签的约束,保障唯一性
    //标签1[@属性1 = "属性值1"]/标签2[@属性2 = "属性值2"]/.../text()
    

    1)获取a标签中的内容

        a = selector.xpath('//div[@id="container"]/a[1]/text()')[0]
        print(a)
    

    2)点击跳转至新浪

    sina = selector.xpath('//div[@id="conainer"]/a[2]/text()')
    sina = sina[0]
    print(sina)
    

    2.获取属性值

    //标签1[属性1 = "属性值1"]/标签2[属性2 = "属性值2"]/.../@属性名
    
    • 获取鲁班七号详情网址
    m = selector.xpath('//div[@id="lu"]/a[1]/@href')
    print(m)
    

    访问服务器端的前端代码

    使用的是requests

    pip install requests   #安装requests
    
    import requests  #导入
    
    url = 'https://www.baidu.com'
    response = requests.get(url)   #获取响应
    print(response)   #200代表响应成功代码
    response.encoding = 'utf-8'  #修改编码方式
    data = response.text
    print(data)
    with open('baidu.html','w',encoding='UTF-8')as f:    # 写入本地 'w' write 写入
        f.write(data)
    data_content = response.content
    print(data_content)
    
    • response.content和 response.text 的区别
    1. response.text
      返回类型:str
      解码类型 根据http头部对响应的编码做出有根据的推测,推测文本编码
      修改编码方式:response.encoding = 'utf-8'

    2. response.content
      返回类型:bytes
      解码类型 没有指定
      修改编码方式:response.content.decode('utf-8')

    • 访问知乎
    url = 'http://www.zhihu.com'
    res = requests.get(url)
    print(res.status_code)  
    # 400    400表示请求失败
    #添加headers
    #为什么添加headers?
    #模拟浏览器访问,欺骗服务器,获取与浏览器一致的内容
    #headers 的形式:字典
    
    
    # 添加header的知乎
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
    # User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
    response = requests.get(url, headers=headers)
    print(response.status_code)  
    # 200 200代表成功了
    

    *爬取当当网图书信息爬虫

    from lxml import html
    import requests
    def spider(isbn):
        """爬取当当网图书信息爬虫"""
        # isbn   国际标准书号
        url="http://search.dangdang.com/?key={}&act=input".format(isbn)
        print(url)
    
        #获取网页的源代码
        headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"}
        #Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
        html_data = requests.get(url, headers=headers).text
    
        #使用xpath语法
        selector = html.fromstring(html_data)
        #爬取所有书籍的标题
        ul_list = selector.xpath('//div[@id="search_nature_rg"]/ul/li')
        print('有{}家商铺售卖此书'.format(len(ul_list)))
        #遍历
        for li in ul_list:
            title = li.xpath('a/@title')
            print(title)
            #获取所有购买链接
            link = li.xpath('a/@href')[0]
            print(link)
            #获取价格
            price = li.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')[0]
            #去掉¥
            price = price.replace('¥', ' ')
            print(price)
    isbn = input('请输入您要查询的书号')
    spider(isbn)
    

    相关文章

      网友评论

        本文标题:python爬取当当网图书信息

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