bs4简单入个门

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ixAzzxs-1660313912482)(/Users/poru/Library/Application Support/typora-user-images/image-20220812220403397.png)]

一、bs4的基础知识点

from bs4 import BeautifulSoup
import requests
res = requests.get(url).text

###标签的选择方法###
soup = BeutifulSoup(res,'lxml')
soup.p.attrs['name']			#可以获得皮标签的name属性的值
soup.div.p.string					#div标签下p标签的字符串
soup.p.children						#p标签下所有子节点,返回是一个迭代器
soup.p.descendants				#p标签下所有子孙节点,比如p的子节点下还有子节点,这个方法可以把这些节点都选中
soup.p.parent							#p标签的父节点。
soup.p.parents						#p节点的祖先节点
soup.p.next_siblings			#p标签的下面的兄弟节点
soup.p.previous_siblings	#p标签上面的兄弟节点
a.get_text()								#获取a标签里面的text文本

##带有属性的选择方法##
soup.find_all('p')				#选择所有p标签
soup.find_all(attrs={'id':'xxx'})				#选择所有ID属性值XXX
soup.find_all('p',attrs={'id':'xxx'})		#选择p标签中id属性值为xxx的所有内容

#####css选择器
soup.select('.xxx')		#class为xxx的所有内容
soup.select('div p')	#div标签下的p标签
soup.select('#xxxx')	#id为xxx的内容
soup.select('div,li')	  #选择div,li标签

二、过程中遇到的一些错误

2.1 遇到的错误一

f"Invalid leading whitespace, reserved character(s), or return"
requests.exceptions.InvalidHeader: Invalid leading whitespace, reserved character(s), or returncharacter(s) in header value: ' Mozilla/5.0 (Macintosh;Intel Mac OS X 10_15_7)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'

这个问题出现的原因是因为在复制粘贴的User-Agent里面存在空格,就会导致报这个错误,把空格删掉以后这个错误就能得到解决.

2.2 遇到的错误二

Traceback (most recent call last):
  File "/Users/poru/PycharmProjects/spider/python_douban/sipder_douban250.py", line 28, in <module>
    score = item.find('span', {'class': 'rating_num '}).get_text()
AttributeError: 'NoneType' object has no attribute 'get_text'

这个问题出现的原因是因为在复制粘贴的{‘class’: 'rating_num '里面存在空格,就会导致报这个错误,把空格删掉以后这个错误就能得到解决.

2.3 遇到的错误三

Traceback (most recent call last):
  File "/Users/poru/PycharmProjects/spider/python_douban/sipder_douban250.py", line 39, in <module>
    w.writerows(result)
TypeError: a bytes-like object is required, not 'str'

遇到这个问题的原因是在打开文件的mode里面用的是‘wb’格式,但是我的结果的str类型的,所以报错。

三、源代码

import requests
from bs4 import BeautifulSoup
import csv

result = []
header = {
    'User-Agent': 'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_15_7)AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/104.0.0.0 Safari/537.36 '
}

for i in range(0, 10):
    url = f'https://movie.douban.com/top250?start={i * 25}&filter='
    resp = requests.get(url, headers=header)
    # print(resp)
    resp.encoding = "utf-8"
    soup = BeautifulSoup(resp.text, 'html.parser')
    for item in soup.find_all('div', 'info'):
        title = item.div.a.span.string
        # print(title)
        year = item.find('div', 'bd').p.contents[2].string

        # 去掉换行符和空格
        # year = year.replace('\n','')
        # year = year.replace(' ', '')

        year = year.strip()

        year = year[0:4]

        score = item.find('span', {'class': 'rating_num'}).get_text()

        ls = [title, year, score]
        result.append(ls)

# print(result)

with open('douban.csv', mode='wb') as f:
    w = csv.writer(f)
    w.writerows(result)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值