Python 爬虫

Requests urllib的升级版本打包了全部功能并简化了使用方法
beautifulsoup 是一个可以从HTML或XML文件中提取数据的Python库.
LXML 一个HTML解析包 用于辅助beautifulsoup解析网页

urllib2用一个Request对象来映射你提出的HTTP请求。
在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,
通过调用urlopen并传入Request对象,将返回一个相关请求response对象,
这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。

百度贴吧小爬虫
目的:输入带分页的地址,去掉最后面的数字,设置一下起始页数和终点页数。
功能:下载对应页码内的所有页面并存储为html文件。

 1 import urllib2
 2 import string 
 3 
 4 def baidu_tieba(url,begin_page,end_page):
 5     for i in range(begin_page,end_page):
 6         sName = string.zfill(i,5)+'.html'
 7         print 'is downloading ' + str(i) +' page and restore it as '+ sName + '......'
 8         f=open(sName,'w+')
 9         m=urllib2.urlopen(url+str(i)).read()
10         f.write(m)
11         f.close()
12 
13 bdurl = "http://tieba.baidu.com/p/4989517604?pn="
14 begin_page = 1
15 end_page = 5
16 
17 baidu_tieba(bdurl,begin_page,end_page)

 

查看workspace,我们可以看到
这里写图片描述

这里写图片描述

这样一个一个的页面就被我们保存到本地啦!!真的很简单很开心啊!!!

re模块
使用re的一般步骤是:
Step1:先将正则表达式的字符串形式编译为Pattern实例。
Step2:然后使用Pattern实例处理文本并获得匹配结果(一个Match实例)。
Step3:最后使用Match实例获得信息,进行其他的操作。

用户代理 User Agent,是指浏览器,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好。
如何查看chrome的用户代理信息?
在地址栏中输入:chrome://version/ 即可显示全部信息

1 用户代理    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

 

出现 SyntaxError: Non-ASCII character ‘\xef’ in file hello.py on line 10, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details问题时很明显是编码的问题,那么就在.py文件头添加一句
#coding:utf-8

便可以解决问题。

小技能:f12+fn 快速调出审查元素

糗事百科

 1 # coding:utf-8
 2 import urllib2
 3 import urllib
 4 import re
 5 page = 1 
 6 url = 'http://www.qiushibaike.com/hot/page/'+str(page)
 7 user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
 8 headers = {'User-Agent' : user_agent}
 9 try:
10     request = urllib2.Request(url,headers = headers)
11     response = urllib2.urlopen(request)
12     content  = response.read()
13     pattern = re.compile('h2>(.*?)</h2.*?content">(.*?)</.*?number">(.*?)</',re.S)
14     items = re.findall(pattern,content)
15     for item in items:
16         print item[1],item[2]
17 
18 except urllib2.URLError,e:
19     if hasattr(e,"code"):
20         print e.code
21     if hasattr(e,"reason"):
22         print e.reason
23 
24 # 打印出第一页的html code,这里使用headers是伪装成浏览器,防止被封,有的网站需要这样的
25 # 措施,否则会报出httplib.BadStatusLine: ''这样的错误,有的则没有被封的风险。
26 
27 #2.提取某一页的所有段子
28 #1).*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,以后我们还会大量用到 .*? 的搭配。
29 
30 #2)(.*?)代表一个分组,在这个正则表达式中我们匹配了三个分组,在后面的遍历item中,item[0]就代表第一个(.*?)所指代的内容,item[1]就代表第二个(.*?)所指代的内容,以此类推。
31 
32 #3)re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。
33 #这样我们便获得了发布内容 点赞数

 

Quotes 一个hin简单的网站!
经过一天的摸鱼之旅之后终于要开始学习scrapy框架啦,毕竟干写爬虫和用框架写一定是不一样的。
看了一些基础scrapy教程之后爬了一个结构很简单的网站,但是还没有保存,其中有些东西还不是很懂。

 1 import scrapy 
 2 
 3 
 4 class Myspider(scrapy.Spider):
 5 
 6     name = 'hello'
 7 
 8     def start_requests(self):
 9        urls=[
10        'http://quotes.toscrape.com/page/1/',
11        'http://quotes.toscrape.com/page/2/',
12        ]
13        for url in urls:
14            yield scrapy.Request(url=url,callback=self.parse) 
15 
16 
17     def parse(self, response):
18         # page = response.url.split("/")[-2]
19         # filename = 'quotes-%s.html' % page
20         # with open(filename,'wb') as f:
21         #     f.write(response.body)
22         # self.log('Saved file %s' % filename)
23         content = response.xpath(".//div[@class='quote']/span[1]/text()").extract()
24         for i in content: 
25             print i 

 

这里写图片描述
上面的一个引号便是一条条的quote啦,超级简单啦~

2017/5/20 愉快的节日~心情很好所以想学一下Mysql在python中的应用。
1)#!/usr/bin/python
是用来说明脚本语言是Python的。是要用/usr/bin下面的程序(工具)python,这个解释器,来解释python脚本,来运行python脚本的。

2)#-- coding: utf-8 --
是用来指定文件编码为utf-8的。

我搜索了一下“# -- coding:utf-8 -- 为什么要这样的格式?”,有人在下面回复说:“大概是颜文字?”萌到我了!其实应该是Emacs处理编码的方式。在sublime里面我们输入# coding:urf-8也是没有问题的啦~

连接mysql数据库

  • 到mysql5.7/bin/下输入,以进入数据库:
  • 1 mysql -hlocalhost -uroot -p
    显示数据库内容:
  • 1 SHOW DATABASES;
    创建数据库:
  • 1 CREATE DATABASE testdb;
    创建一个’testuser’的测试用户,并予以相应的权限:
  • 1 CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
    使用数据库:
  • 1 mysql> USE testdb;
    grant 权限 on 数据库对象 to 用户,赋予权限给用户
  • 1 mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
    退出
 1 mysql> quit;
 2 #!user/bin/python
 3 # coding:utf-8
 4 # print mysql version
 5 import MySQLdb as mdb
 6 import sys
 7 con = None
 8 try:
 9     con = mdb.connect('localhost','testuser','test623','testdb')
10     # 主机名 用户名 密码 数据库
11     cur = con.cursor()
12     # 创建游标
13     cur.execute("SELECT VERSION()")
14     data = cur.fetchone()
15     print "database version:%s " %data
16 except mdb.Error,e:
17     print "error %d: %s" %(e.args[0],e.args[1])
18 finally:
19     if con:
20         con.close()

 

便打印出数据库的版本:

1 database version:5.7.17-log

 

2.新建表并插入数据
我们先来看看SQL建表语句

 1 create table userinfo 
 2 
 3 ( 
 4   id int primary key identity,--identity每次自动加1
 5   name char(20), 
 6   age int check(age>10), 
 7   sex char(2) 
 8 )
 9 
10 --插入
11 insert into userinfo(name,age,sex) values('张三',24,'')

 

tip:运行python时每次弹出“IndentationError: unindent does not match any outer indentation level”就说明tab and blank又混用啦!不得不说这一点真麻烦呢。

 1 # coding: utf-8
 2 import MySQLdb as mdb
 3 import sys
 4 
 5 con = mdb.connect('localhost', 'testuser', 'test623', 'testdb');
 6 with con:
 7     cur = con.cursor()
 8     cur.execute("CREATE TABLE IF NOT EXISTS Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")
 9     cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
10     cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
11     cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
12     cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
13     cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")

 

3.提取表中数据

 1 # coding: utf-8
 2 import MySQLdb as mdb
 3 import sys
 4 
 5 con = mdb.connect('localhost', 'testuser', 'test623', 'testdb');
 6 with con:
 7     cur = con.cursor()
 8     cur.execute("SELECT * FROM Writers")
 9     rows = cur.fetchall()
10     #get all the data from the table and put it in a list
11     for row in rows:
12         print row
13 C:\python\workspace>python haha.py
14 (1L, 'Jack London')
15 (2L, 'Honore de Balzac')
16 (3L, 'Lion Feuchtwanger')
17 (4L, 'Emile Zola')
18 (5L, 'Truman Capote')

 

转载于:https://www.cnblogs.com/twomeng/p/9476734.html

### Python爬虫的学习资源与使用方法 Python爬虫是一种高效的工具,用于自动化的网络信息采集。由于其丰富的库支持以及简洁易懂的语法特性,Python 成为了编写网络爬虫的最佳选择之一[^3]。 #### 学习Python爬虫的基础知识 学习Python爬虫不仅涉及理论知识的理解,还需要通过实际操作来加深印象。在移动设备上也可以轻松完成这些任务,因为手机端的Python环境配置较为简便,可以随时随地进行实践练习[^1]。 #### 推荐的Python爬虫教程列表 以下是几份高质量的Python爬虫教程推荐: - **基础篇** - 《一只小爬虫》[^2] - 《Python与简单网络爬虫的编写》[^2] - **进阶篇** - 《[Python]网络爬虫(五):urllib2的使用细节与抓站技巧》[^2] - 《[Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)》[^2] - **高级功能** - 《Python爬虫——抓取网页并解析HTML》[^2] - 《Python正则表达式指南》[^2] 除了上述具体的文章外,《Python爬虫新手指南及简单实战》也是一份非常适合初学者的内容,其中包含了详细的案例分析和代码演示[^3]。 #### 实践中的关键技术点 当开始构建自己的第一个爬虫项目时,需要注意以下几个方面: 1. 数据请求模块的选择,比如`requests`或内置的`urllib`。 2. HTML页面解析技术的应用,例如BeautifulSoup或者lxml库。 3. 对于复杂的数据提取需求,则可能需要用到正则表达式的辅助[^2]。 下面展示一段简单的爬虫脚本作为参考: ```python import requests from bs4 import BeautifulSoup url = 'https://example.com' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') titles = soup.find_all('h1') for title in titles: print(title.text.strip()) ``` 此段程序展示了如何访问目标网址,并从中提取所有的标题标签内容[^3]。 #### 工具扩展建议 如果计划进一步深入研究大数据量场景下的爬虫应用,那么像Pandas这样的数据分析框架将会非常有用。它可以方便地管理和转换所收集到的信息至结构化形式以便后续统计分析工作[^4]。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值