python爬虫总结心得_python爬虫简单总结

一、模拟浏览器获取整个页面数据

(1)代码

import urllib

def Gethtml(url):

page=urllib.urlopen(url)

html=page.read()

return html

(2)解释

urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据。

urllib.urlopen()方法用于打开一个URL地址。read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来。执行程序就会把整个网页打印输出。

(3)打印有可能遇到编码问题,这个最后讲

二、正则表达式

(1)正则表达式

正则表达式是可以匹配文本片段的模式。最简单的正则表达式就是普通字符串,可以匹配其自身。换包话说,正则表达式’python’ 可以匹配字符串’python’ 。你可以用这种匹配行为搜索文本中的模式,并且用计算后有值并发特定模式,或都将文本进行分段。

(2)通配符

通配符

意义

举例

.

任何除换行符之外的字符

\

特殊字符转义

python\.org

|

整个模式或匹配,匹配任意一个

‘python | perl’

()

模式一部分进行匹配

‘p(ython | erl)’

匹配前一个字符0次或1次

非贪婪匹配

*

允许重复0次或多次

+

允许重复1次或多次

{m}

匹配前一个模式m次

(pattern){m} ab{2}c ->abbc

{m,n}

允许模式重复m~ n 次

(pattern){m,n}

\d

数字[0-9]

\D

非数字

\s

空白符[<空格>\t\r\n\f\v]

\S

非空白符

\w

单词字符[A-Za-Z0-9]

\W

非单词字符

注意:

(1)?

python的数量词默认贪婪匹配,例如ab*查找abbbc,得到abbb,用通配符?变为非贪婪匹配

ab*?可以得到ab

(2)\

该符号可能出现在文本中,就需要两次‘\’

或可以使用r‘\’代表‘\\’

二、re模块常用函数

函数名

功能

Tips

compile(pattern)

产生模式

search(pattern,string)

字符串开始匹配模式

若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个

split(pattern,string)

模式的匹配进行分割

如果没有加小括号,则返回结果就是用正则表达式匹配的groups;

如果加了小括号,会返回所有的groups,包括不匹配的groups也会包括在返回结果中。

findall(pattern,string)

列举出字符串中模式的所有匹配项

默认贪婪匹配,非贪婪匹配注意小括号的使用

三、编码问题

编码问题往往让人头疼呀~

总结一句:在哪里输出就要符合输出平台的编码类型

1、获取编码类型

(1)网页的编码类型,能在源码看到FoKXTb9bJ4oz50HcrMOE6ZNa_at3

(2)平台的编码类型,如python(不论是IDE还是.py文件),可以使用:

import sys

print sys.getdefaultencoding()

Fvwf0ZwF9B5Co2uUGXkYrm-qT5d2

(3)文件的编码类型(涉及到文件路径时候需要注意)

import sys

print sys.getfilesystemencoding()

比如,我们经常遇到字符串和将其输出到终端显示字符不一致。原因就是终端的编码类型和该字符编码类型不一致

python文件中字符串(UTF-8编码)输出windows的cmd中,因为cmd默认GBK编码,会乱码

2、python编码规范

(1)声名编码类型

# -*- coding:utf-8 -*-

# coding=

任选,但是注意:虽然我们python文件声明的UTF-8编码,但是实际上若是用GBK编码,而此时,文件中的字符串,很明显是用GBK存储,所以【实际为主】

(2)简化输入语句(u“我爱我家”→"我爱我家" )

文件开头使用from __future__ import unicode_literals以此避免在中文前面加u,以考虑到迁移到python3。

3、从哪里来到哪里去的问题(原来编码类型,输出平台编码类型)如何去?需要转换(decode->encode)

string.decode("utf-8").encode(""gbk") ( utf-8->gbk)

举一反三:编码就那么几种类型(utf-8、gbk、gb2312、gb18030),只有当decode内参数值是string的编码类型时候,才能语句执行通过,因此可以通过有技巧地尝试来检验一个string的编码类型

4、自己踩过的坑

(1)打印网页html时候中文还是正常显示,但是匹配findall函数之后中文就变成utf-8码了,不明白,utf-8码也能显示中文呀,为什么不能转换过来呢?

原因:findall之后的结果是list,list打印能执行,但会遇到不显示中文的结果

解决方案:打印string型数据就可以了,print list[n]

(2)写入excel文件正常显示中文,将编码类型引入

workook=xlwt.Workbook(encoding="utf-8")#建立excel文件

ws=workbook.add_sheet(SheetName)#建立sheet,建立顺序变化的字符串名字 :SheetName="sheet"+"_".join(str(i+1))

ws.write(cell_i,cell_j,TemTableHead,badFontStyle)#cell_i和cell_j分别是网格横纵坐标,从0开始

workbook.save(WorkbookName)#保存表格

(3)再补充个写入txt文件

f=file(filename,"w")

f.append()

f.writelines()等函数灵活使用即可

注意在pycharm中写的时候,会提示函数,可以看下函数名和参数,猜一下函数功能,然后在去浏览器搜索目标函数,效率更高。

四、账号密码登录方法

未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值