zoukankan      html  css  js  c++  java
  • Python 爬虫个人记录(一)豆瓣电影250

    一、爬虫环境

    Python3.6
    scrapy1.4
    火狐浏览器
    qq浏览器

    二、scrapy shell 测试并获取 xpath

    1、进入scrapy shell
    这里写图片描述

    2 、获取html

    fetch('https://movie.douban.com/top250')

    这里写图片描述

    DEBUG: Crawled (403) GET https://movie.douban.com/top250访问失败
    失败原因:豆瓣250拒绝爬虫访问
    解决方案:为访问添加header,伪装成浏览器访问
    浏览器header参考位置

    浏览器header参考位置

    scrapy shell 添加header参考 :http://blog.csdn.net/qq_30242609/article/details/54581674

    $ scrapy shell
    ...
    >>> from scrapy import Request
    >>> req = Request('yoururl.com', headers={'User-Agent':'Mozilla/5.0'}) 

    >>> fetch(req)

    如下200,成功返回网页

    成功获取网页
    使用qq浏览器 ‘查看元素’ 获取所需元素的xpath(火狐浏览器查看方法自行搜索)
    这里写图片描述

    得到

    *[@id=”content”]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]
    
    response.xpath(‘//*[@id=”content”]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()’).extract()

    返回结果

    类比分析网页得到电影名字:

    Xpath = ‘//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()’

    在shell中验证结果

    这里写图片描述

    验证通过,在shell中已经得到了所需xpath

    三、编写python代码

    1、分析豆瓣250网址
    https://movie.douban.com/top250?start=0&filter=
    https://movie.douban.com/top250?start=25&filter=
    https://movie.douban.com/top250?start=25&filter=
    .
    .
    .

    得到需要打开的网址表达式

    for i in range(10):
            page_url = 'https://movie.douban.com/top250?start=' + str(i*25) + '&filter='
    

      

    2、如何在python中运用xpath()筛选数据

    from lxml import etree
    #html 为urllib.request.urlopen(url).read()文本
    html = url_open(page_url)
    
            selector = etree.HTML(html)
    
            result = selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')

    至此已经获得了xpath路径,爬虫网址源代码已经没有难度了

    3 源代码参考

    import urllib.request
    import os
    from lxml import etree
    
    #打开一个网页操作
    def url_open(url):
        req = urllib.request.Request(url)
        req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3226.400 QQBrowser/9.6.11681.400')
        response = urllib.request.urlopen(url)
        html = response.read()
    
        return html
    
    #找到数据进行xpath分析
    def find_urls(page = 1):
        result_data = []
        file_urls = []
        url = 'https://movie.douban.com/top250?start=0&filter='
        for i in range(10):
            page_url = 'https://movie.douban.com/top250?start=' + str(i*25) + '&filter='
            html = url_open(page_url)
    
            selector = etree.HTML(html)
    
            result = selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')
    
            for each in result:
                result_data.append(each)
    
        return result_data
    
    #将数据保存在本地
    def save(name):
        file_name = '豆瓣250.txt'
        with open(file_name, 'w') as f:
            for each in name:
                f.write(each)
                f.write('
    ')
                print(each)    
    
    if __name__ == '__main__':
        name = find_urls()
        save(name)

    4、爬虫结果
    成功

    四、总结

    1、获取xpath
    2、获取爬虫网址
    3、编写python代码

    五、最后说两句

    第一次编写教程,也是边学边写写,第一次教程会稍微啰嗦点,后面较复杂的会尽量写的简洁易懂些。

  • 相关阅读:
    poj3625
    Directx10,11的SwapChain,RenderTarget和DepthBuffer解释
    Everything you need to know about Authenticode Code Signing
    Best Render Settings for After Effects CS5
    javascript 中cookie的存储,获取cookie,删除cookie的方法
    白话数字签名(番外篇)——签名EXE文件(下)
    在php中使用CKEDITOR在线编辑器
    HTML5 VIDEO标签播放事件流水
    白话数字签名(番外篇)——签名EXE文件(上)
    自定义hint框
  • 原文地址:https://www.cnblogs.com/Undo-self-blog/p/7467741.html
Copyright © 2011-2022 走看看