Python爬虫系统化学习(1)

前言:爬虫的学习对生活中很多事情都很有帮助,比如买房的时候爬取房价,爬取影评之类的,学习爬虫也是在提升对Python的掌握,所以我准备用2-3周的晚上时间,提升自己对Python爬虫的掌握。

Python爬取目标的三个流程:

1.获取页面:

基础技术:request,urllib,selenium

进阶技术:多线程多进程抓取,登陆抓取,突破IP封禁,使用服务器抓取

2.解析页面:

基础技术:re正则表达式,BeatuifulSoup和lxml

进阶技术:解决中文乱码方法

3.存储页面:

基础技术:存入txt文件和存入csv文件

进阶技术:存入MySQL数据库和MongDB数据库


首先根据书籍,我写了如下的代码:

#!/usr/bin/python
# coding=utf-8
from bs4 import BeautifulSoup
import requests
link ="http://www.santostang.com/"
r=requests.get(link)
soup=BeautifulSoup(r.text,"html.parser")
title=soup.find("h1",class_="post-title").a.text.strip()
with open('title_text.txt',"a+") as f:
f.write(title)

代码目的为:获取URL的前端源码中h1标签中以post-title为class的a标签的文本,并且去除两端的空格,比如获取到:

<h1 class="post-title"><a> 这是被爬取的内容</a></h1>

实现过程报错:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

经过查询,报错原因是Unicode编码与ASCII编码的不兼容,Python脚本文件是由utf-8编码的。,在源代码头部添加修改编码格式的代码

import sys
reload(sys)
sys.setdefaultencoding('u')

爬取成功

实验二:访问B站50个网页,测试访问状态

#!/usr/bin/python
#coding:utf-8
import requests
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from bs4 import BeautifulSoup
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0","Host":"www.bilibili.com"}
link="https://www.bilibili.com/v/technology/career/spm_id_from=333.5.b_7375626e6176.6#/all/default/0/"
def GetName(url,i):
url=url+str(i)+'/'
tr=requests.get(url,headers=head)
print(url,':',str(tr.status_code))
for i in range(51):
GetName(link,i)

反思不足:其实已经可以爬取得到网页源码了,但是不会解析,正则匹配的数量过多导致失败,导致只能进行到这一步。

收获:

①:print('haha', end=""),不换行打印

②:sys 重新修改python编码

③:heads字典加载放到requests请求里

④:URL加载与组合

⑤:追写文件的方法,前单引号,后双引号:

with open(‘a.txt’,"a+") as f:
f.write(text)

Python爬虫系统学习(1)的更多相关文章

  1. Python爬虫系统化学习(2)

    Python爬虫系统学习(2) 动态网页爬取 当网页使用Javascript时候,很多内容不会出现在HTML源代码中,所以爬取静态页面的技术可能无法使用.因此我们需要用动态网页抓取的两种技术:通过浏览 ...

  2. Python爬虫系统化学习(4)

    Python爬虫系统化学习(4) 在之前的学习过程中,我们学习了如何爬取页面,对页面进行解析并且提取我们需要的数据. 在通过解析得到我们想要的数据后,最重要的步骤就是保存数据. 一般的数据存储方式有两 ...

  3. Python爬虫系统化学习(5)

    Python爬虫系统化学习(5) 多线程爬虫,在之前的网络编程中,我学习过多线程socket进行单服务器对多客户端的连接,通过使用多线程编程,可以大大提升爬虫的效率. Python多线程爬虫主要由三部 ...

  4. 一个Python爬虫工程师学习养成记

    大数据的时代,网络爬虫已经成为了获取数据的一个重要手段. 但要学习好爬虫并没有那么简单.首先知识点和方向实在是太多了,它关系到了计算机网络.编程基础.前端开发.后端开发.App 开发与逆向.网络安全. ...

  5. python爬虫专栏学习

    知乎的一个讲python的专栏,其中爬虫的几篇文章,偏入门解释,快速看了一遍. 入门 爬虫基本原理:用最简单的代码抓取最基础的网页,展现爬虫的最基本思想,让读者知道爬虫其实是一件非常简单的事情. 爬虫 ...

  6. Python爬虫的学习经历

    在准备学习人工智能之前呢,我看了一下大体的学习纲领.发现排在前面的是PYTHON的基础知识和爬虫相关的知识,再者就是相关的数学算法与金融分析.不过想来也是,如果想进行大量的数据运算与分析,宏大的基础数 ...

  7. python爬虫scrapy学习之篇二

    继上篇<python之urllib2简单解析HTML页面>之后学习使用Python比较有名的爬虫scrapy.网上搜到两篇相应的文档,一篇是较早版本的中文文档Scrapy 0.24 文档, ...

  8. python3网络爬虫系统学习:第一讲 基本库urllib

    在python3中爬虫常用基本库为urllib以及requests 本文主要描述urllib的相关内容 urllib包含四个模块:requests——模拟发送请求 error——异常处理模块 pars ...

  9. python3网络爬虫系统学习:第二讲 基本库requests(一)

    之前,我们学习了基本库urllib的相关用法,但是在网页验证.Cookies处理等方面是比较繁琐的,需要用到Handler并且还需自己构建Opener.requests库的出现很好的解决了这个问题,下 ...

随机推荐

  1. WPF 一种带有多个子集的类ComBox 解决方法

    在最近的工作中遇到很多,类似这种layUI风格的Combox: 因为WPF原本的控件,并不具备这种功能,尝试重写Combox的模板,发现无从下手. 于是尝试从多个控件组合来实现这个功能. 这里使用了P ...

  2. Java 复习整理day03

    变量或者是常量, 只能用来存储一个数据, 例如: 存储一个整数, 小数或者字符串等. 如果需要同时存储多个同类型的数据, 用变量或者常量来实现的话, 非常的繁琐. 针对于 这种情况, 我们就可以通过数 ...

  3. Vue.js到前端工程化

    b站视频地址:黑马程序员Vue.js到前端工程化(webpack打包,以及Vue-cli3和Element-UI的使用) vue学习系列 1.vue概述 2.vue基本使用 3.vue模板语法 4.指 ...

  4. vue、element-ui 依权限动态导航 v-for、v-if

    在管理后台需要按用户权限展示不同导航菜单时,我们需要从后端请求数据来进行菜单渲染. 但由于v-for与v-if不能在同一标签内使用(存在性能问题:v-for 具有比 v-if 更高的优先级,意味着 v ...

  5. 一篇文章图文并茂地带你轻松学完 JavaScript 原型和原型链

    JavaScript 原型和原型链 在阅读本文章之前,已经默认你了解了基础的 JavaScript 语法知识,基础的 ES6 语法知识 . 本篇文章旨在为 JavaScript继承 打下基础 原型 在 ...

  6. Little Difference Gym - 101612L 思维

    题意: 给你一个数n,你需要输出它可以由那几个数相乘构成,我们设可以由x个数构成,这x个数中最小值为minn,最大值为maxx,那么要求maxx-minn<=1 问你满足上面要求的情况有多少种. ...

  7. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛. A.Easy Equation (前缀和/差分)

    题意:RT,给你四个数\(a,b,c,d\),求\(x+y+z=k\)的方案数. 题解:我们可以先枚举\(x\)的值,然后\(x+y\)能取到的范围一定是\([x,x+b]\),也就是说这个区间内每个 ...

  8. 02、Jmeter正则表达式提取器

    转载自:http://blog.csdn.net/quiet_girl/article/details/50724313 在使用Jmeter过程中,会经常使用到正则表达式提取器提取器,虽然并不直接涉及 ...

  9. windows下的PyCharm设置注释字体的斜体

    操作截图如下:File --> Settings --> Editor --> Color Scheme --> Language Defaults --> Commen ...

  10. MySQL 事务日志

    重做日志(Redo log) 重做日志(Redo log),也叫做前滚日志,存放在如下位置,轮询使用,记录着内存中数据页的变化,在事务 ACID 过程中,主要实现的是 D(Durability)的作用 ...