爬虫入门之beautifulsoup(一)

近期需要爬取足彩信息,因为需求比较特殊,所以准备自己爬数据。

 

一开始学了一个非常简单的爬虫例子,主要用到了beautifulsoup和requests

 

from bs4 import BeautifulSoup
import requests
import lxml


url = 'https://movie.douban.com/cinema/later/chengdu/'
response = requests.get(url)

ans = response.content.decode('utf-8')
# print(response.content.decode('utf-8'))

soup = BeautifulSoup(ans,'lxml')
# print(soup)
all_movie = soup.find('div',id = "showing-soon")

for each_movie in all_movie.find_all('div',class_='item'):
    movie_name = each_movie.find_all('a')[1].text
    print(movie_name)

用着几行代码先爬了豆瓣的电影数据。

但是,这毕竟是入门,我需要爬取的是多个网页,一个一个网址输入是不行的,所以还是准备从基础的爬虫开始试着学一下,如果进度太慢,我就直接用for循环加上述的简单代码尝试爬取数据。

 

这里主要是直接用beautifulsoup这个库,听说这个库对于爬虫初学者非常友好并且简洁。官方文档的网址:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

是有中文文档的。

 

文档开头介绍对象的内容比较简单,直接从遍历文档树这个部分开始学习。

 

子节点操作:

1. 由于beautifulsoup的优势是简洁,不太需要像其他框架那样严谨的正则化。它自带了tag以及tag的树型数据结构。

对于html格式的内容,可以通过.的操作直接获取,如soup.head即可回去内容的head。

特别地,“.”操作能够跳级获取内容。如果在head的tag下还有一个title的tag,完全可以直接soup.title获取。

 

2. 我们说tag是beautifulsoup的一个对象属性,但是对于正儿八经的html格式内容,会有真正的“标签”<a>。这些标签里的内容往往是我们真正需要的详细内容,如果需要获取真正标签内的内容,我们需要用到find_all()方法。

soup.find_all('a')    #获取了所有a标签内的内容

 

3. contents和.childen操作

这个操作是我比较喜欢的,直接使用.contents可以以list形式输出内容:

print(soup.head.contentas)

#[XXXXXXX]

而.childen也是我很喜欢的,它能够直接枚举出所有的子节点,多用于for循环中。

与之相近的是.descendants,这个属性不仅能够枚举出子节点,还能把子节点的节点都全部枚举。

 

4. string属性

我认为这个属性比较多余,他的意思就是如果该节点仅仅只有一个子节点,那么就输出这个节点,完全可以用.contents直接取代他。

 

 

——————————————————————————————————————————————————

学到这里我大致看了一下剩下的官方文档,其实可以用到的时候直接看,那么我的问题还是没有得到解决:

我需要的是多个网页跳转爬取信息,这个beautifulsoup说来说去都是在解析html内容的,那么这个部分可以先搁置,实战中弥补,那么回到项目流程,我接下来需要解决的是网页跳转。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章