爬虫入门教程之requests,BeautifulSoup库的介绍以及问题解释

 

HTTP协议

HTTP,超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,HTTP是一种基于"请求与响应"模式的、无状态的应用层协议。HTTP协议采用URL作为定位网络资源的的标识符。
http://host[:post][path]
host:合法的Internet主机域名或ip地址
port:端口号,缺省为80
path:请求资源的路径

HTTP URl的理解:
url是通过HTTP协议存取资源的的Internet路径,一个URL对应一个数据资源。
 

Requests库

与HTTP协议操作相对应的requests库的7个方法如下:

方法说明
requests.request()构造一个请求,支撑以下各方法的基础方法
requests.get()获取HTML网页的主要方法,对应于HTTP的GET
requests.head()获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post()向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch()向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete()向HTML页面提交删除请求,对应于HTTP的DELETE

 

 

 

 

 

 

 

 

 

安装

pip install requests

requests库安装小测

import request
url = 'https://www.baidu.com'
r = requests.get(url)
r.encoding = r.apparent_encoding
print(r.text[-200:])

Out[13]: 'w.baidu.com/duty/>使用百度前必读</ a>  < a href= >意见反馈</ a> 京ICP证030173号  < img src=//www.baidu.com/img/gs.gif> </p > </div> </div> </div> </body> </html>\r\n'

requests库的详细介绍:

(以后再补上)

Requests库应用的固定格式:

import requests

def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

BeautifulSoup 库

BeautifulSoup 库介绍:

(以后补上)

划重点:BeautifulSoup库的基本使用中,注意NavigableString元素类型及<Tag>.string的使用;代码如下:

text =  "<li><a class=B href=//www.dianping.com/beijing/ch10/g112>大众点评</a></li>"
soup = BeautifulSoup(text,"html.parser")
str = soup.li.string
str1 = soup.li.a.string
str2 = soup.a.string
#这里str=str1=str2
type(str) = bs4.element.NavigableString


text1 = "<li>大众点评<a class=B href=//www.dianping.com/beijing/ch10/g112></a></li>"
soup = BeautifulSoup(text1,"html.parser")
str = soup.li.string
error

text2 = "<li><a class=B href=//www.dianping.com/beijing/ch10/g112></a>大众点评</li>"
soup = BeautifulSoup(text2,"html.parser")
str = soup.li.string
error

#当一个tag中既有tat.children,又有NavigableString时,不识别<Tag>.string,且type()默认为none。
此时应该用<Tag>.text来取出Tag中的string。

完整代码示例:

 

#-*- coding:utf-8 -*-
#Crawlandmark_trading area.py
#商区,地标爬取

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import requests

from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
        
def fillSQList(sqlist, html):
    soup = BeautifulSoup(html,"html.parser")
    for div in soup.find_all("div", "box shopallCate"):
        if div.find("h2").text == "商区":
#        if div.find("h2").text == "地标":
            for dl in div.find_all("dl"):
                NaN = ""
                sqlist.append([dl.find("dt").text,NaN])
                for li in dl.find_all("li"):
                    sqlist.append([NaN,li.a.string])
                        

def toCsv(sqlist):
    sqlist = pd.DataFrame(data = sqlist)
    sqlist.to_csv('商区.csv',encoding='utf_8_sig')
#    sqlist.to_csv('地标.csv',encoding='utf_8_sig')
if __name__ == '__main__':
    sqlist = []
    url = "http://www.dianping.com/shopall/2/0#BDBlock"
    html = getHTMLText(url)
    fillSQList(sqlist, html)
    toCsv(sqlist)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值