首页 > 编程知识 正文

python爬取出版社(python爬虫参考书籍与出版信息)

时间:2023-12-21 10:48:46 阅读:318623 作者:MJXZ

本文目录一览:

Python从入门到精通要看哪些书

Python入门到精通学习书籍推荐!

1、Python基础教程(第2版 修订版)

《Python基础教程(第2版修订版)》包括Python程序设计的方方面面,内容涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合各个层次的Python开发人员阅读参考。

2、Python编程:从入门到实践

本书是一本针对所有层次的Python读者而作的Python入门书。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念;第二部分将理论付诸实践。本书适合对Python感兴趣的任何层次的读者阅读。

3、Python核心编程(第3版)

《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本,总共分为3部分。

第1部分为讲解了Python的一些通用应用;第2部分讲解了与Web开发相关的主题;第3部分为一个补充/实验章节,包括文本处理以及其他内容。《Python核心编程(第3版)》适合具有一定经验的Python开发人员阅读。

4、利用Python进行数据分析

《利用Python进行数据分析》是2013年机械工业出版社出版的软硬件开发类图书,作者是麦金尼。讲述了从pandas库的数据分析工具开始利用高性能工具、matpIotlib、pandas的groupby功能等处理各种各样的时间序列数据。

5、Python零基础入门学习

本书适合学习Python3的入门读者,也适用对编程一无所知,但渴望用编程改变世界的朋友们!本书提倡理解为主,应用为王。虽然这是一本入门书籍,但本书的“野心”可并不止于“初级水平”的教学。

6、用Python写网络爬虫

《用Python写网络爬虫》作为使用Python来爬取网络数据的杰出指南,讲解了从静态页面爬取数据的方法以及使用缓存来管理服务器负载的方法。

本书是为想要构建可靠的数据爬取解决方案的开发人员写作的,本书假定读者具有一定的Python编程经验。当然,具备其他编程语言开发经验的读者也可以阅读本书,并理解书中涉及的概念和原理。

7、O'Reilly:Python学习手册(第4版)

《7.O'Reilly:Python学习手册(第4版)》每一章都包含关于Python语言的关键内容的独立的一课,并且包含了一个独特的“练习题”部分,其中带有实际的练习和测试,以便你可以练习新的技能并随着学习而测试自己的理解。你会发现众多带有注释的示例以及图表,它们将帮助你开始学习Python3.0。

8、流畅的Python

《流畅的Python》致力于帮助Python开发人员挖掘这门语言及相关程序库的优质特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。

9、O'Reilly:深入浅出Python(中文版)

《O'Reilly:深入浅出Python(中文版)》是经典python图书,初中级python独门秘笈,涵盖python3.0摒弃枯燥、死板的说教方式,以类似生动PPT的形式教你学python。

10、“笨办法”学Python(第3版附光盘1张)

这本《“笨办法”学Python》的写法独树一帜,从章节练习入手,引导读者自己输入代码,并进行讲解,每个章节都不是很难,循循善诱,本书不是很厚,但是读完本书绝对有一种对Python语言大彻大悟的感觉,是将一本书从薄读到厚的升华。建议Python初学者购买阅读。

这十本书都是很适合小白入门Python并逐渐深入学习的,大家静下心来可以好好挑选出最适合自己的。

如何用python爬取豆瓣读书的数据

这两天爬了豆瓣读书的十万条左右的书目信息,用时将近一天,现在趁着这个空闲把代码总结一下,还是菜鸟,都是用的最简单最笨的方法,还请路过的大神不吝赐教。

第一步,先看一下我们需要的库:

import requests                       #用来请求网页

from bs4 import BeautifulSoup         #解析网页

import time          #设置延时时间,防止爬取过于频繁被封IP号

import re            #正则表达式库

import pymysql       #由于爬取的数据太多,我们要把他存入MySQL数据库中,这个库用于连接数据库

import random        #这个库里用到了产生随机数的randint函数,和上面的time搭配,使爬取间隔时间随机

这个是豆瓣的网址:x-sorttags-all

我们要从这里获取所有分类的标签链接,进一步去爬取里面的信息,代码先贴上来:

import requests

from bs4 import BeautifulSoup       #导入库

url="httom/tag/?icn=index-nav"

wb_data=requests.get(url)                #请求网址

soup=BeautifulSoup(wb_data.text,"lxml")  #解析网页信息

tags=soup.select("#content div div.article div div table tbody tr td a")

#根据CSS路径查找标签信息,CSS路径获取方法,右键-检查-copy selector,tags返回的是一个列表

for tag in tags:

tag=tag.get_text()    #将列表中的每一个标签信息提取出来

helf="hom/tag/"

#观察一下豆瓣的网址,基本都是这部分加上标签信息,所以我们要组装网址,用于爬取标签详情页

url=helf+str(tag)

print(url)    #网址组装完毕,输出

以上我们便爬取了所有标签下的网址,我们将这个文件命名为channel,并在channel中创建一个channel字符串,放上我们所有爬取的网址信息,等下爬取详情页的时候直接从这里提取链接就好了,如下:

channel='''

tag/程序

'''

现在,我们开始第二个程序。

QQ图片20160915233329.png

标签页下每一个图片的信息基本都是这样的,我们可以直接从这里提取到标题,作者,出版社,出版时间,价格,评价人数,以及评分等信息(有些外国作品还会有译者信息),提取方法与提取标签类似,也是根据CSS路径提取。

我们先用一个网址来实验爬取:

url="htt/tag/科技"

wb_data = requests.get(url)

soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml")

tag=url.split("?")[0].split("/")[-1]    #从链接里面提取标签信息,方便存储

detils=soup.select("#subject_list ul li div.info div.pub")  #抓取作者,出版社信息,稍后我们用spite()函数再将他们分离出来

scors=soup.select("#subject_list ul li div.info div.star.clearfix span.rating_nums")   #抓取评分信息

persons=soup.select("#subject_list ul li div.info div.star.clearfix span.pl")    #评价人数

titles=soup.select("#subject_list ul li div.info h2 a")   #书名

#以上抓取的都是我们需要的html语言标签信息,我们还需要将他们一一分离出来

for detil,scor,person,title in zip(detils,scors,persons,titles):

#用一个zip()函数实现一次遍历

#因为一些标签中有译者信息,一些标签中没有,为避免错误,所以我们要用一个try来把他们分开执行

try:

author=detil.get_text().split("/",4)[0].split()[0]     #这是含有译者信息的提取办法,根据“/”  把标签分为五部分,然后依次提取出来

yizhe= detil.get_text().split("/", 4)[1]

publish=detil.get_text().split("/", 4)[2]

time=detil.get_text().split("/", 4)[3].split()[0].split("-")[0]   #时间我们只提取了出版年份

price=ceshi_priceone(detil)        #因为价格的单位不统一,我们用一个函数把他们换算为“元”

scoe=scor.get_text() if True else ""    #有些书目是没有评分的,为避免错误,我们把没有评分的信息设置为空

person=ceshi_person(person)      #有些书目的评价人数显示少于十人,爬取过程中会出现错误,用一个函数来处理

title=title.get_text().split()[0]  

#当没有译者信息时,会显示IndexError,我们分开处理

except IndexError:

try:

author=detil.get_text().split("/", 3)[0].split()[0]

yizhe=""         #将detil信息划分为4部分提取,译者信息直接设置为空,其他与上面一样

publish=detil.get_text().split("/", 3)[1]

time=detil.get_text().split("/", 3)[2].split()[0].split("-")[0]

price=ceshi_pricetwo(detil)

scoe=scor.get_text() if True else ""

person=ceshi_person(person)

title=title.get_text().split()[0]

except (IndexError,TypeError):

continue  

#出现其他错误信息,忽略,继续执行(有些书目信息下会没有出版社或者出版年份,但是数量很少,不影响我们大规模爬取,所以直接忽略)

except TypeError:

continue

#提取评价人数的函数,如果评价人数少于十人,按十人处理

def ceshi_person(person):

try:

person = int(person.get_text().split()[0][1:len(person.get_text().split()[0]) - 4])

except ValueError:

person = int(10)

return person

#分情况提取价格的函数,用正则表达式找到含有特殊字符的信息,并换算为“元”

def ceshi_priceone(price):

price = detil.get_text().split("/", 4)[4].split()

if re.match("USD", price[0]):

price = float(price[1]) * 6

elif re.match("CNY", price[0]):

price = price[1]

elif re.match("A$", price[0]):

price = float(price[1:len(price)]) * 6

else:

price = price[0]

return price

def ceshi_pricetwo(price):

price = detil.get_text().split("/", 3)[3].split()

if re.match("USD", price[0]):

price = float(price[1]) * 6

elif re.match("CNY", price[0]):

price = price[1]

elif re.match("A$", price[0]):

price = float(price[1:len(price)]) * 6

else:

price = price[0]

return price

实验成功后,我们就可以爬取数据并导入到数据库中了,以下为全部源码,特殊情况会用注释一一说明。

import requests

from bs4 import BeautifulSoup

import time

import re

import pymysql

from channel import channel   #这是我们第一个程序爬取的链接信息

import random

def ceshi_person(person):

try:

person = int(person.get_text().split()[0][1:len(person.get_text().split()[0]) - 4])

except ValueError:

person = int(10)

return person

def ceshi_priceone(price):

price = detil.get_text().split("/", 4)[4].split()

if re.match("USD", price[0]):

price = float(price[1]) * 6

elif re.match("CNY", price[0]):

price = price[1]

elif re.match("A$", price[0]):

price = float(price[1:len(price)]) * 6

else:

price = price[0]

return price

def ceshi_pricetwo(price):

price = detil.get_text().split("/", 3)[3].split()

if re.match("USD", price[0]):

price = float(price[1]) * 6

elif re.match("CNY", price[0]):

price = price[1]

elif re.match("A$", price[0]):

price = float(price[1:len(price)]) * 6

else:

price = price[0]

return price

#这是上面的那个测试函数,我们把它放在主函数中

def mains(url):

wb_data = requests.get(url)

soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml")

tag=url.split("?")[0].split("/")[-1]

detils=soup.select("#subject_list ul li div.info div.pub")

scors=soup.select("#subject_list ul li div.info div.star.clearfix span.rating_nums")

persons=soup.select("#subject_list ul li div.info div.star.clearfix span.pl")

titles=soup.select("#subject_list ul li div.info h2 a")

for detil,scor,person,title in zip(detils,scors,persons,titles):

l = []  #建一个列表,用于存放数据

try:

author=detil.get_text().split("/",4)[0].split()[0]

yizhe= detil.get_text().split("/", 4)[1]

publish=detil.get_text().split("/", 4)[2]

time=detil.get_text().split("/", 4)[3].split()[0].split("-")[0]

price=ceshi_priceone(detil)

scoe=scor.get_text() if True else ""

person=ceshi_person(person)

title=title.get_text().split()[0]

except IndexError:

try:

author=detil.get_text().split("/", 3)[0].split()[0]

yizhe=""

publish=detil.get_text().split("/", 3)[1]

time=detil.get_text().split("/", 3)[2].split()[0].split("-")[0]

price=ceshi_pricetwo(detil)

scoe=scor.get_text() if True else ""

person=ceshi_person(person)

title=title.get_text().split()[0]

except (IndexError,TypeError):

continue  

except TypeError:

continue

l.append([title,scoe,author,price,time,publish,person,yizhe,tag])

#将爬取的数据依次填入列表中

sql="INSERT INTO allbooks values(%s,%s,%s,%s,%s,%s,%s,%s,%s)"  #这是一条sql插入语句

cur.executemany(sql,l)   #执行sql语句,并用executemary()函数批量插入数据库中

conn.commit()

#主函数到此结束

# 将Python连接到MySQL中的python数据库中

conn = pymysql.connect( user="root",password="123123",database="python",charset='utf8')

cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS allbooks')   #如果数据库中有allbooks的数据库则删除

sql = """CREATE TABLE allbooks(

title CHAR(255) NOT NULL,

scor CHAR(255),

author CHAR(255),

price CHAR(255),

time CHAR(255),

publish CHAR(255),

person CHAR(255),

yizhe CHAR(255),

tag CHAR(255)

)"""

cur.execute(sql)  #执行sql语句,新建一个allbooks的数据库

start = time.clock()   #设置一个时钟,这样我们就能知道我们爬取了多长时间了

for urls in channel.split():

urlss=[urls+"?start={}type=T".format(str(i)) for i in range(0,980,20)]   #从channel中提取url信息,并组装成每一页的链接

for url in urlss:

mains(url)       #执行主函数,开始爬取

print(url)        #输出要爬取的链接,这样我们就能知道爬到哪了,发生错误也好处理

time.sleep(int(format(random.randint(0,9))))   #设置一个随机数时间,每爬一个网页可以随机的停一段时间,防止IP被封

end = time.clock()

print('Time Usage:', end - start)    #爬取结束,输出爬取时间

count = cur.execute('select * from allbooks')

print('has %s record' % count)       #输出爬取的总数目条数

# 释放数据连接

if cur:

cur.close()

if conn:

conn.close()

这样,一个程序就算完成了,豆瓣的书目信息就一条条地写进了我们的数据库中,当然,在爬取的过程中,也遇到了很多问题,比如标题返回的信息拆分后中会有空格,写入数据库中会出现错误,所以只截取了标题的第一部分,因而导致数据库中的一些书名不完整,过往的大神如果有什么办法,还请指教一二。

等待爬取的过程是漫长而又欣喜的,看着电脑上一条条信息被刷出来,成就感就不知不觉涌上心头;然而如果你吃饭时它在爬,你上厕所时它在爬,你都已经爬了个山回来了它还在爬时,便会有点崩溃了,担心电脑随时都会坏掉(还是穷学生换不起啊啊啊啊~)

所以,还是要好好学学设置断点,多线程,以及正则,路漫漫其修远兮,吾将上下而求索~共勉~

从python基础到爬虫的书有什么值得推荐

《Python3爬虫入门到精通课程视频【附软件与资料】【34课时】--崔庆才》百度网盘资源免费下载

链接:

?pwd=zxcv 提取码:zxcv

Python3爬虫入门到精通课程视频【附软件与资料】【34课时】--崔庆才|章节5: 分布式篇|章节4: 框架篇|章节3: 实战篇|章节2: 基础篇|章节1: 环境配置|Python3爬虫课程资料代码.zip|2018-Python3网络爬虫开发实战-崔庆才.pdf|课时06:Python爬虫常用库的安装.zip|课时05:Python多版本共存配置.zip|课时04:MySQL的安装.zip|课时03:Redis环境配置.zip|课时02:MongoDB环境配置.zip|课时01:Python3+Pip环境配置.zip|课时13:Selenium详解.zip  

《用Python写网络爬虫》pdf下载在线阅读,求百度网盘云资源

《用Python写网络爬虫》([澳]理查德 劳森)电子书网盘下载免费在线阅读

链接:

密码:syiu  

书名:用Python写网络爬虫

作者:[澳]理查德 劳森

译者:李斌

豆瓣评分:7.2

出版社:人民邮电出版社

出版年份:2016-8-1

页数:157

内容简介:

作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用。使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站。

《用Python写网络爬虫》作为使用Python来爬取网络数据的杰出指南,讲解了从静态页面爬取数据的方法以及使用缓存来管理服务器负载的方法。此外,本书还介绍了如何使用AJAX URL和Firebug扩展来爬取数据,以及有关爬取技术的更多真相,比如使用浏览器渲染、管理cookie、通过提交表单从受验证码保护的复杂网站中抽取数据等。本书使用Scrapy创建了一个高级网络爬虫,并对一些真实的网站进行了爬取。

《用Python写网络爬虫》介绍了如下内容:

通过跟踪链接来爬取网站;

使用lxml从页面中抽取数据;

构建线程爬虫来并行爬取页面;

将下载的内容进行缓存,以降低带宽消耗;

解析依赖于JavaScript的网站;

与表单和会话进行交互;

解决受保护页面的验证码问题;

对AJAX调用进行逆向工程;

使用Scrapy创建高级爬虫。

本书读者对象

本书是为想要构建可靠的数据爬取解决方案的开发人员写作的,本书假定读者具有一定的Python编程经验。当然,具备其他编程语言开发经验的读者也可以阅读本书,并理解书中涉及的概念和原理。

作者简介:

Richard Lawson来自澳大利亚,毕业于墨尔本大学计算机科学专业。毕业后,他创办了一家专注于网络爬虫的公司,为超过50个国家的业务提供远程工作。他精通于世界语,可以使用汉语和韩语对话,并且积极投身于开源软件。他目前在牛津大学攻读研究生学位,并利用业余时间研发自主无人机。

如何爬取全网1200本Python书

前面写了一篇文章关于爬取市面上所有的Python书思路,这也算是我们数据分析系列讲座里面的一个小的实战项目。上次代码没有写完,正好周末有时间把代码全部完成并且存入了数据库中,今天就给大家一步步分析一下是我是如何爬取数据,清洗数据和绕过反爬虫的一些策略和点滴记录。

1

目标网站分析-主页面爬取

1).市面上所有的Python书,都在京东,淘宝和豆瓣上,于是我选择了豆瓣来爬取

2).分析网站的结构,其实还是比较简单的,首先有一个主的页面,里面有所有python的链接,一共1388本(其中有100多本其实是重复的),网页底部分页显示一共93页

3).这个页面是静态页面,url页比较有规律,所以很容易构造出所有的url的地址

4).爬虫每个分页里面的所有的Python书和对应的url,比如第一页里面有"笨办法这本书",我们只需要提取书名和对应的url

2

单个页面分析爬取

1).上面我们已经提取了93个页面的所有的Python书和对应的url,一共是93*15大概1300多本书,首先先去重,然后我们可以把它存到内存里面用一个字典保存,或者存到一个csv文件中去(有同学可能奇怪为啥要存到文件里面呢,用字典存取不是方便吗,先不说最后揭晓)

2).我们接着分析每本书页面的特征:

上一片文章说过我们需要分析:

作者/出版社/译者/出版年/页数/定价/ISBN/评分/评价人数

看一下网站的源码,发现主要的信息在div id="info" 和div class="rating_self clearfix"

3).这一部分的数据清洗是比较麻烦的,因为不是每一本书都是有点评和评分系统的,而且不是每一本书都有作者,页面,价格的,所以提取的时候一定要做好异常处理,比如有的页面长的这样:

原始数据采集的过程中有很多不一致的数据:

书的日期表示格式,各种各样都有:

有的书的日期是:'September 2007','October 22, 2007','2017-9','2017-8-25'

有的书的价格是货币单位不统一,有美金,日元,欧元和人民币

比如:CNY 49.00,135,19 €,JPY 4320, $ 176.00

3

多线程爬取

1).有的同学后台问我,你是用scrapy框架还是自己动手写的,我这个项目是自己动手写的,其实scrapy是一个非常棒的框架,如果爬取几十万的数据,我一定会用这个超级武器.

2).我用的是多线程爬取,把所有的url都扔到一个队列里面,然后设置几个线程去队列里面不断的爬取,然后循环往复,直到队列里的url全部处理完毕

3).数据存储的时候,有两种思路:

一种是直接把爬取完的数据存到SQL数据库里面,然后每次新的url来了之后,直接查询数据库里面有没有,有的话,就跳过,没有就爬取处理

另一种是存入CSV文件,因为是多线程存取,所以一定要加保护,不然几个线程同时写一个文件的会有问题的,写成CSV文件也能转换成数据库,而且保存成CSV文件还有一个好处,可以转成pandas非常方便的处理分析.

4

反爬虫策略

1).一般大型的网站都有反爬虫策略,虽然我们这次爬的数量只有1000本书,但是一样会碰到反爬虫问题

2).关于反爬虫策略,绕过反爬虫有很多种方法。有的时候加时延(特别是多线程处理的时候),有的时候用cookie,有的会代理,特别是大规模的爬取肯定是要用代理池的,我这里用的是cookie加时延,比较土的方法.

3).断点续传,虽然我的数据量不是很大,千条规模,但是建议要加断点续传功能,因为你不知道在爬的时候会出现什么问题,虽然你可以递归爬取,但是如果你爬了800多条,程序挂了,你的东西还没用存下来,下次爬取又要重头开始爬,会吐血的(聪明的同学肯定猜到,我上面第二步留的伏笔,就是这样原因)

5

代码概述篇

1).整个的代码架构我还没有完全优化,目前是6个py文件,后面我会进一步优化和封装的

spider_main:主要是爬取93个分页的所有书的链接和书面,并且多线程处理

book_html_parser:主要是爬取每一本书的信息

url_manager:主要是管理所有的url链接

db_manager:主要是数据库的存取和查询

util:是一个存放一些全局的变量

verify:是我内部测试代码的一个小程序

2).主要的爬取结果的存放

all_books_link.csv:主要存放1200多本书的url和书名

python_books.csv:主要存放具体每一本书的信息

3).用到的库

爬虫部分:用了requests,beautifulSoup

数据清洗:用了大量的正则表达式,collection模块,对书的出版日期用了datetime和calendar模块

多线程:用了threading模块和queue

结论:

好,今天的全网分析Python书,爬虫篇,就讲道这里,基本上我们整个这个项目的技术点都讲了一遍,爬虫还是很有意思的,但是要成为一个爬虫高手还有很多地方要学习,想把爬虫写的爬取速度快,又稳健,还能绕过反爬虫系统,并不是一件容易的事情. 有兴趣的小伙伴,也可以自己动手写一下哦。源码等后面的数据分析篇讲完后,我会放github上,若有什么问题,也欢迎留言讨论一下.

Python 语言有没有什么好的书籍

如果想全面学习Python,还是看视频学的更快,给你个老男孩教育Python全栈开发+人工智能的课程大纲,可以看一下!

阶段一:Python开发基础

Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。

阶段二:Python高级编程和数据库开发

Python全栈开发与人工智能之Python高级编程和数据库开发知识学习内容包括:面向对象开发、Socket网络编程、线程、进程、队列、IO多路模型、Mysql数据库开发等。

阶段三:前端开发

Python全栈开发与人工智能之前端开发知识学习内容包括:Html、CSS、JavaScript开发、Jquerybootstrap开发、前端框架VUE开发等。

阶段四:WEB框架开发

Python全栈开发与人工智能之WEB框架开发学习内容包括:Django框架基础、Django框架进阶、BBS+Blog实战项目开发、缓存和队列中间件、Flask框架学习、Tornado框架学习、Restful API等。

阶段五:爬虫开发

Python全栈开发与人工智能之爬虫开发学习内容包括:爬虫开发实战。

阶段六:全栈项目实战

Python全栈开发与人工智能之全栈项目实战学习内容包括:企业应用工具学习、CRM客户关系管理系统开发、路飞学城在线教育平台开发等。

阶段七:数据分析

Python全栈开发与人工智能之数据分析学习内容包括:金融量化分析。

阶段八:人工智能

Python全栈开发与人工智能之人工智能学习内容包括:机器学习、数据分析 、图像识别、自然语言翻译等。

阶段九:自动化运维开发

Python全栈开发与人工智能之自动化运维开发学习内容包括:CMDB资产管理系统开发、IT审计+主机管理系统开发、分布式主机监控系统开发等。

阶段十:高并发语言GO开发

Python全栈开发与人工智能之高并发语言GO开发学习内容包括:GO语言基础、数据类型与文件IO操作、函数和面向对象、并发编程等。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。