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参考位置
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的更多相关文章
- python爬虫--用xpath爬豆瓣电影
步骤 将目标网站下的页面抓取下来 将抓取下来的数据根据一定规则进行提取 具体流程 将目标网站下的页面抓取下来 1. 倒库 import requests 2.头信息(有时候可不写) headers ...
- Python爬虫个人记录(三)爬取妹子图
这此教程可能会比较简洁,具体细节可参考我的第一篇教程: Python爬虫个人记录(一)豆瓣250 Python爬虫个人记录(二)fishc爬虫 一.目的分析 获取煎蛋妹子图并下载 http://jan ...
- Python爬虫个人记录(二) 获取fishc 课件下载链接
参考: Python爬虫个人记录(一)豆瓣250 (2017.9.6更新,通过cookie模拟登陆方法,已成功实现下载文件功能!!) 一.目的分析 获取http://bbs.fishc.com/for ...
- 第一个nodejs爬虫:爬取豆瓣电影图片
第一个nodejs爬虫:爬取豆瓣电影图片存入本地: 首先在命令行下 npm install request cheerio express -save; 代码: var http = require( ...
- Python爬虫之多线程下载豆瓣Top250电影图片
爬虫项目介绍 本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如下图所示: 本次爬虫项目将分别不使用多线程和使 ...
- Python爬虫入门教程:豆瓣Top电影爬取
基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel csv 安装Python并添加到环境变量,pip安装需要的相关模块即可. 爬虫基本思路 一. ...
- 爬虫——正则表达式爬取豆瓣电影TOP前250的中英文名
正则表达式爬取豆瓣电影TOP前250的中英文名 1.首先要实现网页的数据的爬取.新建test.py文件 test.py 1 import requests 2 3 def get_Html_text( ...
- 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用
学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...
- Python爬虫实践 -- 记录我的第二只爬虫
1.爬虫基本原理 我们爬取中国电影最受欢迎的影片<红海行动>的相关信息.其实,爬虫获取网页信息和人工获取信息,原理基本是一致的. 人工操作步骤: 1. 获取电影信息的页面 2. 定位(找到 ...
随机推荐
- bzoj千题计划117:bzoj1026: [SCOI2009]windy数
http://www.lydsy.com/JudgeOnline/problem.php?id=1026 数位DP 如果前一位填的是0, 0是前导0,下一位可以随便填 0不是前导0,下一位不能填1 为 ...
- Challenge 18
Challenge 18给你一个长度为 n 的非负整数序列 a 和 m 个询问 l, r, p, k,表示询问在 a[l .. r] 中 a[i]%p=k 的 i 的个数. 思路: 将序列分为根号n块 ...
- bzoj 5055: 膜法师——树状数组
Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘 ...
- 一个愚蠢的python逻辑语法错误
这个事情再次佐证了一个莫名其妙的现象背后一定会有一个愚蠢到无以复加的错误的真理. 写python单元测试的时候发现一个莫名其妙的问题: def xmlStandander(self,s): retur ...
- 【数据库】SQL经典面试题 - 行列转换二 - 列转行
本帖子是行转列的一个逆向操作——列转行,看下面一个面试题 面试题2: 柠檬班第30期学生要毕业了,他们的Linux.MySQL.Java成绩数据表 tb_lemon_grade_column中, 表中 ...
- cin.get()和cin.getline()之间的区别
cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别. cin.get()每次读取一整行并把由Enter键生成的换行符留在输 ...
- Dream------Hadoop--HDFS的设计
HDFS是为以流式数据访问模式存储超大文件而设计的文件系统. 流式数据访问 HDFS建立在这样一个思想上:一次写入.多次读取模式是最高效的.一个数据集通常由数据源生成或复制, 接着在此基础上进行各 ...
- Spring4笔记12--SSH整合3--Spring与Struts2整合
SSH 框架整合技术: 3. Spring与Struts2整合(对比SpringWeb): Spring 与 Struts2 整合的目的有两个: (1)在 Struts2 的 Action 中,即 V ...
- 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)
cf的比赛越来越有难度了……至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航, ...
- 使用dork脚本来查询Google
使用dork脚本来查询Google 了解Google Hacking数据库的第一步是了解所有典型的Google运算,就像机器级编程工程师必须了解计算机操作代码一样. 这些Google运算是Google ...