python爬虫书籍豆瓣评分(python爬虫豆瓣影评)

http://www.itjxue.com  2023-03-27 21:04  来源:未知  点击次数: 

Python入门书籍推荐

来源:酷瓜书单

1. 《Python基础教程》 豆瓣评分:8

python最快的入门是直接看 docs.python.org/tutorial/, 系统学习的话,这本书不错。

2. 《Python学习手册》 豆瓣评分:8

非常全的一个工具书。建议先大致的看完,然后再根据实际使用去某个章节细读。

3. 《Python 3程序开发指南》 豆瓣评分:8

此书深入浅出,适合python初学者学习。书中的内容包含了进行python编程的所有知识,实例经典

4. 《Python源码剖析》 豆瓣评分:8

国内称得上“著”的书不多,这本书不但是著,而是著得不错。

5. 《Python编程(第三版·英文影印版)》 豆瓣评分:8

大而全的一本书,但是个人觉得它的选题很广,但是都不深入;虽然读起来很轻松,但是废话较多;还有就是GUI的篇幅太多,而我又基本不用GUI... 总体来说,和以前读Core Java的感觉比较接近,适合初学者循序渐进。

阿里Python入门到精通资料大汇总,不啰嗦,全是珍藏资料

(以下资料都已打包,如果有需要的朋友可以转发 私信我“1”,即可免费领取)

1、python系统的思维导图 ,一套全面的python学习路线,包含pythonweb+python爬虫+python自动化+python数据分析:

2、python入门全套视频教程:

3、python电子书籍:

《python入门到精通》这本书籍豆瓣评分9.1分,这个推荐初学者一定要学一下。

4、python开发工具

5、python学习笔记

6、python爬虫的学习资料

以上这些教程我已经为大家打包准备好了,希望对正在学习的你有所帮助!(需要的朋友可以转发 私信我“1”,即可免费领取)

如何用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爬虫开发与项目实战》epub下载在线阅读全文,求百度网盘云资源

《Python爬虫开发与项目实战》(范传辉)电子书网盘下载免费在线阅读

链接:

提取码:zjow ?

书名:Python爬虫开发与项目实战

豆瓣评分:7.0

作者:?范传辉

出版社:?机械工业出版社

出版年:?2017-6

页数:?423

内容简介

随着大数据时代到来,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,本书从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言和Web前端基础知识引领读者入门,之后介绍动态爬虫原理以及Scrapy爬虫框架,最后介绍大规模数据下分布式爬虫的设计以及PySpider爬虫框架等。

主要特点:

l 由浅入深,从Python和Web前端基础开始讲起,逐步加深难度,层层递进。

l 内容详实,从静态网站到动态网站,从单机爬虫到分布式爬虫,既包含基础知识点,又讲解了关键问题和难点分析,方便读者完成进阶。

l 实用性强,本书共有9个爬虫项目,以系统的实战项目为驱动,由浅及深地讲解爬虫开发中所需的知识和技能。

难点详析,对js加密的分析、反爬虫措施的突破、去重方案的设计、分布式爬虫的开发进行了细致的讲解。

作者简介?

范传辉,资深网虫,Python开发者,参与开发了多项网络应用,在实际开发中积累了丰富的实战经验,并善于总结,贡献了多篇技术文章广受好评。研究兴趣是网络安全、爬虫技术、数据分析、驱动开发等技术。

从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爬虫框架 Scrapy》txt下载在线阅读全文,求百度网盘云资源

《精通Python爬虫框架Scrapy》([美]迪米特里奥斯 考奇斯-劳卡斯)电子书网盘下载免费在线阅读

链接:

提取码: qqx3?

书名:《精通Python爬虫框架Scrapy》

作者:[美]迪米特里奥斯 考奇斯-劳卡斯

译者:李斌

豆瓣评分:5.9

出版社:人民邮电出版社

出版年份:2018-2-1

页数:239

内容简介:Scrapy是使用Python开发的一个快速、高层次的屏幕抓取和Web抓取框架,用于抓Web站点并从页面中提取结构化的数据。《精通Python爬虫框架Scrapy》以Scrapy 1.0版本为基础,讲解了Scrapy的基础知识,以及如何使用Python和三方API提取、整理数据,以满足自己的需求。

本书共11章,其内容涵盖了Scrapy基础知识,理解HTML和XPath,安装Scrapy并爬取一个网站,使用爬虫填充数据库并输出到移动应用中,爬虫的强大功能,将爬虫部署到Scrapinghub云服务器,Scrapy的配置与管理,Scrapy编程,管道秘诀,理解Scrapy性能,使用Scrapyd与实时分析进行分布式爬取。本书附录还提供了各种软件的安装与故障排除等内容。

本书适合软件开发人员、数据科学家,以及对自然语言处理和机器学习感兴趣的人阅读。

作者简介:作者:[美]迪米特里奥斯 考奇斯-劳卡斯(Dimitrios Kouzis-Loukas) 译者:李斌

Dimitrios Kouzis-Loukas作为一位软件开发人员,已经拥有超过15年的经验。同时,他还使用自己掌握的知识和技能,向广大读者讲授如何编写软件。

他学习并掌握了多门学科,包括数学、物理学以及微电子学。他对这些学科的透彻理解,提高了自身的标准,而不只是“实用的解决方案”。他知道真正的解决方案应当是像物理学规律一样确定,像ECC内存一样健壮,像数学一样通用。

Dimitrios目前正在使用新的数据中心技术开发低延迟、高可用的分布式系统。他是语言无关论者,不过对Python、C++和Java略有偏好。他对开源软硬件有着坚定的信念,他希望他的贡献能够造福于各个社区和全人类。

关于译者

李斌,毕业于北京科技大学计算机科学与技术专业,获得硕士学位。曾任职于阿里巴巴,当前供职于凡普金科,负责应用安全工作。热爱Python编程和Web安全,希望以更加智能和自动化的方式提升网络安全。

(责任编辑:IT教学网)

更多

推荐Oracle认证文章