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('\n')
            print(each)    

if __name__ == '__main__':
    name = find_urls()
    save(name)

 

4、爬虫结果
成功

四、总结

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

五、最后说两句

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

 

posted @ 2017-08-12 21:56  _Undo  阅读(472)  评论(0编辑  收藏  举报