Day1--豆瓣图书爬虫

照着豆瓣读书练手爬虫自己跟着写了一个简单爬虫

  • 转页的实现

观察不同页的url规律,如豆瓣图书的url页数信息是最后的start=后面的数字,每一页加25,所以以book.douban.com/top250?star… 为基层URL每一页在后面加页面的页数数字。就可以得到所有的页面 url 了。再以for循环迭代每一个 url,使用上面获取数据的方法,获得所有的数据信息。 获取所有页面URL的代码如下:

urllist = []
# 从0到225,间隔25的数组
for page in range(0, 250, 25):
    allurl = base_url + str(page)
    urllist.append(allurl)
复制代码
  • writelines()函数

file.write(str)的参数是一个字符串,就是你要写入文件的内容.

#write()的用法

with open() as f:

f.write(line)
复制代码

file.writelines(sequence)的参数是序列,比如列表,它会迭代帮你写入文件

writelines()

with open() as wf:

wf.writelines([line_list])
复制代码

本次爬虫的代码中在for语句用到此函数

for name, author, score, sum in zip(names, authors, scores, sums):
           ........
           f.writelines(data + '=======================' + '\n')
复制代码

注意 :writelines必须传入的是字符序列,不能是数字序列

如:list_1023 = [1,2,3,4,5]

  • zip()函数

zip()函数的定义 :从参数中的多个迭代器取元素组合成一个新的迭代器;

返回:

返回一个zip对象,其内部元素为元组;可以转化为列表或元组;

传入参数: 元组、列表、字典等迭代器。

zip()函数的用法

## zip()函数有2个参数
m = [[1, 2, 3],  [4, 5, 6],  [7, 8, 9]]
n = [[2, 2, 2],  [3, 3, 3],  [4, 4, 4]]
p = [[2, 2, 2],  [3, 3, 3]]
# 行与列相同
print("行与列相同:\n", list(zip(m, n)))
# 行与列不同
print("行与列不同:\n", list(zip(m, p)))
复制代码

输出

行与列相同:
[([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3]), ([7, 8, 9], [4, 4, 4])]
行与列不同:
[([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3])]
复制代码

当zip()函数中只有一个参数时

zip(iterable)从iterable中依次取一个元组,组成一个元组。

示例

## zip()函数单个参数
list1 = [1, 2, 3, 4]
tuple1 = zip(list1)
# 打印zip函数的返回类型
print("zip()函数的返回类型:\n", type(tuple1))
# 将zip对象转化为列表
print("zip对象转化为列表:\n", list(tuple1))
复制代码

输出

zip()函数的返回类型:
<class 'zip'>
zip对象转化为列表:
[(1,), (2,), (3,), (4,)]
复制代码
  • 关于BeautifulSoupd的一些知识点
  1. 先利用BeautifulSoup来获得一个对象,按找标准的缩进显示的html代码:
from bs4 import BeautifulSoup
 
soup = BeautifulSoup(resp.text, 'lxml')
复制代码
  1. 提取标签内容
list = [<a href="http://www.baidu.com/">百度</a>,
 
<a href="http://www.163.com/">网易</a>,
 
<a href="http://www.sina.com/"新浪</a>]
复制代码

提取它里面的内容如下

for i in list:
    print(i.get_text()) # 我们使用get_text()方法获得标签内容
    print(i.get['href'] # get['attrs']方法获得标签属性
    print(i['href']) # 简写结果一样
复制代码

输出结果

百度
网易
新浪
http://www.baidu.com/
http://www.163.com/
http://www.sina.com/
http://www.baidu.com/
http://www.163.com/
http://www.sina.com/
复制代码

get_text()方法获取标签文本内容get[attrs]方法获取标签属性值

  1. Keyword参数

如果我们的 HTML代码中有几个div标签,但是我们只想获取到class属性为top的div标签,我们怎么出来呢。

soup.find_all('div', class_='top')
# 这里注意下,class是Python的内部关键词,我们需要在css属性class后面加一个下划线'_',不然会报错。
复制代码
  • 其它

1.若写入中文文本应用utf-8编码

f = open(filename, 'w', encoding='utf-8')

2.得到一个书名的列表

alldiv = soup.find_all('div', class_='pl2')
names = [a.find('a')['title'] for a in alldiv]
print(names)
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值