一、爬虫环境

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参考位置

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)

如下

成功获取网页
使用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代码

五、最后说两句

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

Python 爬虫个人记录(一)豆瓣电影250的更多相关文章

  1. python爬虫--用xpath爬豆瓣电影

    步骤 将目标网站下的页面抓取下来 将抓取下来的数据根据一定规则进行提取   具体流程 将目标网站下的页面抓取下来 1. 倒库 import requests 2.头信息(有时候可不写) headers ...

  2. Python爬虫个人记录(三)爬取妹子图

    这此教程可能会比较简洁,具体细节可参考我的第一篇教程: Python爬虫个人记录(一)豆瓣250 Python爬虫个人记录(二)fishc爬虫 一.目的分析 获取煎蛋妹子图并下载 http://jan ...

  3. Python爬虫个人记录(二) 获取fishc 课件下载链接

    参考: Python爬虫个人记录(一)豆瓣250 (2017.9.6更新,通过cookie模拟登陆方法,已成功实现下载文件功能!!) 一.目的分析 获取http://bbs.fishc.com/for ...

  4. 第一个nodejs爬虫:爬取豆瓣电影图片

    第一个nodejs爬虫:爬取豆瓣电影图片存入本地: 首先在命令行下 npm install request cheerio express -save; 代码: var http = require( ...

  5. Python爬虫之多线程下载豆瓣Top250电影图片

    爬虫项目介绍   本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如下图所示:   本次爬虫项目将分别不使用多线程和使 ...

  6. Python爬虫入门教程:豆瓣Top电影爬取

        基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel csv 安装Python并添加到环境变量,pip安装需要的相关模块即可. 爬虫基本思路 一. ...

  7. 爬虫——正则表达式爬取豆瓣电影TOP前250的中英文名

    正则表达式爬取豆瓣电影TOP前250的中英文名 1.首先要实现网页的数据的爬取.新建test.py文件 test.py 1 import requests 2 3 def get_Html_text( ...

  8. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...

  9. Python爬虫实践 -- 记录我的第二只爬虫

    1.爬虫基本原理 我们爬取中国电影最受欢迎的影片<红海行动>的相关信息.其实,爬虫获取网页信息和人工获取信息,原理基本是一致的. 人工操作步骤: 1. 获取电影信息的页面 2. 定位(找到 ...

随机推荐

  1. bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...

  2. openGL笔记-画基本图形

    #include "iostream" #include <GL/glut.h> #include<cmath> #include<vector> ...

  3. 数学建模 TSP(旅行商问题) Lingo求解

    model: sets: cities../:level; link(cities, cities): distance, x; !距离矩阵; endsets data: distance ; end ...

  4. Python核心编程——Chapter15

    正则表达式在脚本语言里是最重要的一部分,这部分的题目真的不容怠慢. 开始这部分的题目的解答! 15.1识别下列字符串:bat,bit,but,hat,hit和hut. >>> imp ...

  5. 计算广告学-多点归因模型(Multi-Touch Attribution Model)

    计算广告学中的一个重要的问题是, 如果用户产生了一次转化(conversion, 比如购买, 注册等), 且该用户在转化之前看过大量不同频道(比如搜索, 展示, 社交等等)的广告, 那么我们如何确定是 ...

  6. LintCode 158: Anagram

    LintCode 158: Anagram 题目描述 写出一个函数anagram(s, t)判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 样例 给出s = "abcd" ...

  7. 【译】第三篇 Replication:事务复制-发布服务器

    本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...

  8. util.promisify 的那些事儿

    util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具 ...

  9. [转]双线性插值(Bilinear interpolation)

    1,原理 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值,兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度 ...

  10. 用jquery实现toast的原理

    function toast(mess){ var str='<div class="mess"><span></span></div&g ...