python爬虫第一步

想学python,但是一直都在入门处徘徊。这次下定决心要坚持下去,要作为自己工作能力的核心竞争力。
刚开始看了虫师的博客–python基础入门,也跟着写了代码,但是写完就忘,而且速度很慢,学得很辛苦,然后想着结合书看也许会好一点,就看了python基础教程(第3版)袁国忠译,看了爬虫和网络编程。也还是觉得难以理解,也是因为变笨了。
最后在慕课找了视频教程《python开发简单爬虫》,坚持看完并调试通过。
现在将学习过程中遇到的问题和收获写下以供后续复习。
课程中是以python2为例,开发的ide是eclipse。我用的是python3和pycharm.这是编码差异。
首先爬虫的基础架构:
爬虫调度器
1.url管理器(不能重复抓取。实现方式:使用内存,python中定义set,set本身是去重的)
2.网页下载器(python自带urlib2模块,requests第三方库(功能更强大))
3.网页分析器(beautifulsoap)
4.输出(存储在文件中或html文件中,最重要的编码格式,我就踩坑了。)
单个模块学习:
网页下载器:
1.urllib2.urlopen打开网页,然后获取响应码和内容
遇到的问题:python3中没有urllib2
解决:
引入模块import urllib.request
urlopen方法的调用urllib.request.urlopen
实例:
#coding:utf-8
import urllib.request
url = “https://www.baidu.com”
print (“one”)
response1 = urllib.request.urlopen(url)
print (response1.getcode())
print (response1.read())
2.Request模块
引入模块import urllib.request
创建Request对象,然后传入header
实例:
#coding:utf-8
import urllib.request
url = “https://www.baidu.com”
print (“two”)
req=urllib.request.Request(url)
req.add_header(“user-agent”,“Mozilla/5.0”)
response2=urllib.request.urlopen(req)
print (response2.getcode())
print (len(response2.read()))
遗留问题:
Request对象的add_header方法的具体使用
扩展问题:
http协议和发送一个请求实际发生了哪些操作

3.特殊场景(HTTPCookieProcessor,HTTPSHandler, HTTPRedirectHandler(网页自动跳转), ProxyHandler)
遇到问题:python3中没有cookiejar
解决:引入模块import urllib.request import http.cookiejar

实例:
#coding:utf-8
import urllib.request
import http.cookiejar
url = “https://www.baidu.com”
print (“three”)
cj = http.cookiejar.CookieJar()
**opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
urllib.request.install_opener(opener)****#比其他两种方式多了这两步,具体我还没理解
response3 = urllib.request.urlopen(url)
print (response3.getcode())
print (cj)
print (len(response3.read()))

网页分析器:
BeautifulSoup的常用三个参数:
第一个为下载的网页信息(字符串),第二个为解析方式,本次课程选择的是html_parser,第三个是编码格式
实例:
BeautifulSoup(html_doc, “html.parser”, from_enconding=“utf-8”)
踩的一个大坑,将python文件名命名为bs4.py。因为是从bs4中导入BeautifulSoup模块,结果运行报错,找了很久的资料才发现是文件名与bs4包名重名,我的苍天啊。。。

还有re模块,还不熟悉,也没进行深入理解的。这块应该要结合正则表达式认真学。
html的信息使用的是三个单引号括起来
获取标签内容的方法是get_text()
find_all()返回的是List
find()返回的是第一个符合条件的元素信息
关于这两个函数的使用可学习这篇文章https://www.cnblogs.com/keye/p/7868059.html
实例:
#coding:utf-8
import re
from bs4 import BeautifulSoup
html_doc=’’’

HTML5网页格式 python python

这是一个最简单的html5页面。

'''

soup = BeautifulSoup(html_doc, “html.parser”, from_enconding=“utf-8”)
print (“all”)
links = soup.find_all(‘a’)
for link in links:
print (link.name,link[‘href’],link.get_text())
link_node = soup.find(‘a’, href = ‘http://’)#所有链接
print (link_node.name,link_node[‘href’],link_node.get_text())
link_node= soup.find(‘a’,href=re.compile(r"ill"))#模糊匹配#正则表达式#含ill的链接
print (link_node.name,link_node[‘href’],link_node.get_text())
p_node = soup.find(‘p’, class_= “”)#由于网页元素的class属性与关键字class重复,所以用class_
print (p_node.name,p_node.get_text())

遗留问题:提示输入的编码格式被忽略
在这里插入图片描述

原因:出现这问题的原因是python3 缺省的编码是unicode, 再在from_encoding设置为utf8就多余了, 会被忽视,然后系统给出警告信息。

但是如何让python支持utf-8编码呢?而且文件开头已经有这条#coding:utf-8语句了,为什么还有这个提示?

后面在写完整的爬虫程序时也遇到编码问题了。。。坑。。。

你可能感兴趣的:(python)