python爬虫小小白入门

python爬虫小小白入门

学习目标

  1. 爬虫基本思想
  2. python爬虫常用包,官方文档,用途,安装方法,常用方法。
  3. 简单爬虫实例——从W3Cschool爬取C语言教程文本

python环境:: Anaconda3, spyder, windows10

一、基本思想

爬虫就是从网页上抓取你想要的内容,主要分为三个步骤。
首先需要仔细分析目标页面内容,知道你想要的内容:文字,图片,视频在HTML中的哪个标签里,然后通过爬虫代码向服务器发起请求,得到HTML页面内容,最后把目标内容解析出来。

分析目标页面-->向服务器发起请求-->得到HTML页面内容-->内容解析

二、python爬虫常见的包

1、urllib [英文官方文档]

用途:urllib是用于处理URL的包,包括以下几个模块,主要用于向服务器发起请求获得响应内容。

urllib.request 用于打开和读取网络资源。

安装方法:
windows——运行——cmd——命令提示符窗口下输入:
pip install urllib
或者conda install urllib

常用方法
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

url:要抓取的网页url。

data:使用POST方式发起请求时,需要传递的参数。

timeout:请求时间限制,如果不设置,会使用默认的timeout

返回值:一个响应对象,有geturl() info() getcode() read()等方法

其它具体参数含义可以查看官方文档。

实例

>>> import urllib.request #
>>> response = urllib.request.urlopen(‘http://www.python.org/‘)
>>> print(response.read(100).decode(‘utf-8‘))
#由于urlopen的返回值是来自HTTP服务器的字节流,所以需要解码,防止乱码。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtm

2、requests [英文文官方文档] [中文官方文档]

用途:用于向服务器发起请求获得响应内容与urllib相同。

安装方法:
windows——运行——cmd——命令提示符窗口下输入:
pip install requests
或者conda install requests

常用方法:
(针对不同的HTTP请求方式)

response =requests.get(http://httpbin.org/put)
相当于:response= requests.request(‘GET‘, ‘https://httpbin.org/get‘)
response =requests.put(‘http://httpbin.org/put‘, data = {‘key‘:‘value‘})
response =requests.delete(‘http://httpbin.org/delete‘)
response =requests.head(‘http://httpbin.org/get‘)
response =requests.options(‘http://httpbin.org/get‘)

返回值为响应对象

  • 获得文本内容:
    >>>response.text
  • 获得音频,图片非文本内容:
    >>>response.content
  • 响应内容转换为json格式
    >>> import requests
    >>> response = requests.get(‘https://api.github.com/events‘)
    >>> response.json()
    
  • 定制请求头
    因为有的网站默认不能访问,需要为请求添加 HTTP头部信息来模拟浏览器,
    >>> url = ‘https://api.github.com/some/endpoint‘
    >>> headers = {‘user-agent‘: ‘my-app/0.0.1‘}
    >>> response = requests.get(url, headers=headers)
    
  • 获取响应状态码:
    >>> response = requests.get(‘http://httpbin.org/get‘)
    >>>response.status_code
    200
    

    获取cookieresponse.cookie()

重定向与请求历史response.history()

实例

>>> import requests
>>> response = requests.get(‘https://api.github.com/events‘)
>>> response.text
u‘[{"repository":{"open_issues":0,"url":"https://github.com/...

3、BeautifulSoup 官方中文文档

用途:用于解析HTML内容

安装方法:
windows——运行——cmd——命令提示符窗口下输入:
pip install beautifulsoup4
或者conda install beautifulsoup4

常用方法:

  • find_all( name , attrs , recursive , string ,**kwargs )

find_all() 方法搜索符合过滤器的条件的标签的所有子节点。

name 参数 name 参数可以查找所有名字为name 的标签,字符串对象会被认为是标签名.
简单的用法如下:

soup.find_all("title")
# [<title>The Dormouse‘s story</title>]

keyword 参数
如果传入id,Beautiful Soup会搜索每个标签的”id”属性.

soup.find_all(id=‘link2‘)
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

如果传入 href 参数,BeautifulSoup会搜索每个标签的”href”属性:

soup.find_all(href=re.compile("elsie"))
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

下面的例子在文档树中查找所有包含 id 属性的标签,无论 id 的值是什么:

soup.find_all(id=True)

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

使用多个参数可以同时过滤多个属性:

soup.find_all(href=re.compile("elsie"), id=‘link1‘)

 #[<a class="sister" href="http://example.com/elsie" id="link1">three</a>]

有些标签特殊属性在搜索不能使用,比如HTML5中的 data-* 属性:

data_soup = BeautifulSoup(‘<div data-foo="value">foo!</div>‘)
data_soup.find_all(data-foo="value")
 SyntaxError: keyword can‘t be an expression

但是可以通过 find_all() 方法的 attrs 参数定义一个字典参数来搜索包含特殊属性的标签:

data_soup.find_all(attrs={"data-foo": "value"})
# [<div data-foo="value">foo!</div>]

按照class属性搜索标签功能非常实用,但标识CSS类名的关键字 class 在Python中是保留字,使用 class 做参数会导致语法错误.从Beautiful Soup的4.1.1版本开始,可以通过 class_ 参数搜索有指定CSS类名的标签:

soup.find_all("a", class_="sister")
 [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

class_ 参数同样接受不同类型的 过滤器 ,字符串,正则表达式,方法或 True :


soup.find_all(class_=re.compile("itl"))#正则表达式过滤
# [<p class="title"><b>The Dormouse‘s story</b></p>]

def has_six_characters(css_class):
    return css_class is not None and len(css_class) == 6

soup.find_all(class_=has_six_characters)#方法过滤
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

tag的 class 属性是 多值属性 .按照CSS类名搜索tag时,可以分别搜索tag中的每个CSS类名:

css_soup = BeautifulSoup(‘<p class="body strikeout"></p>‘)
css_soup.find_all("p", class_="strikeout") #字符串过滤

# [<p class="body strikeout"></p>]

css_soup.find_all("p", class_="body")#字符串过滤
# [<p class="body strikeout"></p>]

css_soup.find_all("p", class_="body strikeout")#字符串过滤
# [<p class="body strikeout"></p>]

#class_也可以写成如下形式:
soup.find_all("a", attrs={"class": "sister"})
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
  • find( name , attrs , recursive , string , **kwargs )

find()方法返回找到的第一个结果。
find_all() 方法没有找到目标是返回空列表, find() 方法找不到目标时,返回 None.


4、selenium 英文官方文档

用途:一个自动化测试框架,很多爬网站必须要登录才可以抓取页面,selenium可以执行js代码,模拟登录,填入表单,点击按钮,下拉操作等。主要使用webdriver模块

安装方法:
windows——运行——cmd——命令提示符窗口下输入:
pip install selenium
或者conda install selenium
主要使用的webdriver模块需要单独下载,不同的浏览器需要下载不同的webdriver。

主流浏览器webdriver下载地址https://selenium-python.readthedocs.io/installation.html

Chrome浏览器安装方法和文档https://sites.google.com/a/chromium.org/chromedriver/getting-started

下载解压后放到Chrome浏览器的安装目录下:

如果不知道自己的Chrome浏览器的安装目录可以在Chrome浏览器中查看:

最后需要配置webdirver环境变量,将webdirver的安装路径添加到PATH中。

常用方法:
查找元素:

find_element_by_id

find_element_by_name

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

查找多个元素:

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

填充文本:
element.send_keys("some text")

执行JS代码:

driver.execute_script(‘window.scrollTo(0, document.body.scrollHeight)‘)
driver.execute_script(‘alert("To Bottom")‘)

得到文本内容


driver.get(url)
input = driver.find_element_by_class_name(‘p‘)
print(input.text)

实例:

from selenium import webdriver  

chromedriver = "C:/Users/Administrator/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(chromedriver)

#设置浏览器需要打开的url
url = "http://www.baidu.com"
driver.get(url)

#在百度搜索框中输入关键字"python"
driver.find_element_by_id("kw").send_keys("python")
#单击搜索按钮
driver.find_element_by_id("su").click()
driver.quit() #关闭浏览器

运行程序后观察,程序打开浏览器,并且输入关键字python,点击按钮,跳转到搜索结果页面,然后关闭。

5、从W3Cschool爬取C语言教程文本内容

实例:
webdriver也可以发送请求,获取网页内容,因此没有使用urlib,和requests.

from  bs4 import BeautifulSoup
import time
from selenium import webdriver

class CrawText():
    def __init__(self):
        self.headers = {‘User-Agent‘:‘ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36‘}          #定制请求头,模拟浏览器
        self.web_url = ‘https://www.w3cschool.cn/c/c-data-types.html‘ #W3CShcoolC语言教程的起始url
        self.folder_path=‘W3Cschool-C.txt‘#文本保存路径

    def get_text(self):
        with open(self.folder_path,‘a‘,encoding=‘utf-8‘) as f:
            driver = webdriver.Chrome(‘C:/Users/Administrator/AppData/Local/Google/Chrome/Application/chromedriver.exe‘)
            #点击操作21次,抓取前20个主题的内容
            for i in range(0,21):
                driver.get(self.web_url) #获得网页内容
                element = driver.find_element_by_class_name(‘content-bg‘)   #得到元素
                soup = BeautifulSoup(element.text,‘lxml‘)        #解析内容
                for i in soup:
                    f.write(i.get_text()) #写入文件
                driver.find_element_by_class_name(‘next-link‘).click()#模拟点击操作
                self.web_url = driver.current_url #设置点击后的url
            driver.quit() 

crawtext=CrawText() #创建类的实例
crawtext.text()     #执行方法

?

原文地址:https://www.cnblogs.com/ChingO/p/10136514.html

时间: 2024-10-08 05:53:52

python爬虫小小白入门的相关文章

python爬虫-基础入门-爬取整个网站《3》

python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python2.x 使用类库: >> urllib 库 >> urllib2 库 python3.x 使用的类库: >> urllib 库 变化: -> 在python2.x中使用import urllib2 ----- 对应的,在python3.x 中会使用import url

Python爬虫怎么入门-让入门更快速,更专注

经常有同学私信问,Python爬虫该怎么入门,不知道从何学起,网上的文章写了一大堆要掌握的知识,让人更加迷惑. 我也浏览了下网上关于怎么Python爬虫入门的文章,发现有的还在教人用urllib来发送http请求,这真是有点误人子弟了.本文也不提倡刚开始去学习第三方爬虫框架,我想把要学习的知识简化一些,让入门更快速,更专注. Python爬虫入门:技能 真要说Python爬虫需要具备什么知识,那就是你得会Python,哈哈. 其他的知识就是你能熟练运用Python的几个第三方库,当然你具备一点h

python爬虫从入门到精通-系列教程

开始爬虫之旅 引言 我经常会看到有人在知乎上提问如何入门 Python 爬虫?.Python 爬虫进阶?.利用爬虫技术能做到哪些很酷很有趣很有用的事情?等这一些问题,我写这一系列的文章的目的就是把我的经验告诉大家. 什么是爬虫? 引用自维基百科 网络蜘蛛(Web spider)也叫网络爬虫(Web crawler),蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机

Python爬虫简单入门及小技巧

刚刚申请博客,内心激动万分.于是为了扩充一下分类,随便一个随笔,也为了怕忘记新学的东西由于博主十分怠惰,所以本文并不包含安装python(以及各种模块)和python语法. 目标 前几天上B站时看到一部很好玩的番剧,名字<笨女孩>,实际上是由同名的搞笑向漫画动画化的.大家都知道动画一般一周一更,很难满足我们的需求,所以我们就来编写一个爬虫,来爬取漫画咯. 那么本文的目标就是爬取<初音MIX>这部漫画(因为笨女孩我已经爬取过了>_<).这部漫画我记得是小学的时候看的,也是

Python爬虫从入门到进阶(2)之爬虫简介

1.爬虫入门:使用代码模拟真实用户发送网络请求批量获取数据1).爬虫价值: 1.买卖数据(高端领域特别贵) 2.数据分析(出分析报告) 3.流量 4.阿里指数,百度指数2).合法性:灰色产业政府没有法律规定爬虫是否违法 公司概念:公司让你爬取数据 爬虫是否可以爬所有的东西?不可以,爬虫只能爬取到用户可以访问的数据 爱奇艺视频(vip 用户,非 vip 用户) 付费小说(付费才能爬取) 2.爬虫分类: 1.通用爬虫:使用搜索引擎:百度,360,谷歌... 劣势:目标不明确,返回的内容90%是用户不

Python爬虫小白入门必读,成为大牛必须经历的三个阶段

学习任何一门技术,都应该带着目标去学习,目标就像一座灯塔,指引你前进,很多人学着学着就学放弃了,很大部分原因是没有明确目标,所以,一定要明确学习目的,在你准备学爬虫前,先问问自己为什么要学习爬虫.有些人是为了一份工作,有些人是为了好玩,也有些人是为了实现某个黑科技功能.不过可以肯定的是,学会了爬虫能给你的工作提供很多便利. 大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自

Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider/tree/master/jobboleSpider 注:这个文章并不会对详细的用法进行讲解,是为了让对scrapy各个功能有个了解,建立整体的印象. 在学习Scrapy框架之前,我们先通过一个实际的爬虫例子来理解,后面我们会对每个功能进行详细的理解.这里的例子是爬取http://blog.jobb

python爬虫从入门到放弃(六)之 BeautifulSoup库的使用

上一篇文章的正则,其实对很多人来说用起来是不方便的,加上需要记很多规则,所以用起来不是特别熟练,而这节我们提到的beautifulsoup就是一个非常强大的工具,爬虫利器. beautifulSoup “美味的汤,绿色的浓汤” 一个灵活又方便的网页解析库,处理高效,支持多种解析器.利用它就不用编写正则表达式也能方便的实现网页信息的抓取 快速使用 通过下面的一个例子,对bs4有个简单的了解,以及看一下它的强大之处: from bs4 import BeautifulSoup html = '''

python爬虫从入门到放弃(三)之 Urllib库的基本使用

官方文档地址:https://docs.python.org/3/library/urllib.html 什么是Urllib Urllib是python内置的HTTP请求库包括以下模块urllib.request 请求模块urllib.error 异常处理模块urllib.parse url解析模块urllib.robotparser robots.txt解析模块 urlopen 关于urllib.request.urlopen参数的介绍:urllib.request.urlopen(url,