python网络信息提取_Python网络爬虫与信息提取(未完待续)

最近在看崇天老师的MOOC Python网络爬虫与信息提取课程,先开个头

首先必须安装requests 库

方法很简单 pip install requests即可

b278ec1582392c480f2c33a57c3fef20.png

以上是requests 库中的7个主要方法import requests

url='http://www.baidu.com'

r=requests.get(url)

print(r.status_code)

r.encoding='utf-8'

print(r.text)

简单抓取百度的代码

r=requests.get(url)

在这行代码中,返回r的数据类型是Response类,赋值号右边的是Request类

Response对象属性(重要)

6547e9534dc4291719e6af283a406cb9.png

Requests库的异常

667713c9fcbef74756d7ffb121ef215e.png

25afa9e9e683eb32806a243c62eb2457.png

params的用法

ca33cef3e3a1aead6637d8b7bec8ee25.png

一、爬取京东实例

1.在爬取京东网站的时候import requests

url='https://item.jd.com/100006713417.html'

try:

r=requests.get(url)

print(r.status_code)

print(r.text[:1000])

except :

print('出现异常')

得到这个结果:

f08c792261500ca82f720e637f5e00df.png

显然这不是我们想要的信息,访问结果中的链接发现是京东的登录界面。

2.解决问题

在查找了相关资料之后,发现京东是有来源审查的,于是可以通过修改headers和cookie参数来实现

cookie参数查找方法:

进入页面之后按F12,然后进入network界面,刷新之后找到对应的页面,如图

96d911675b035a9156c79f8062cfecfa.pngimport requests

url = 'https://item.jd.com/100006713417.html'

cookiestr='unpl=V2_ZzNtbRAHQ0ZzDk9WKBlbDWJXQF5KBBYRfQ0VBHhJWlEyABBaclRCFnQUR11nGlUUZwYZWEdcRxxFCEVkexhdBGAAE19BVXMlRQtGZHopXAFvChZVRFZLHHwJRVRyEVQDZwQRWENncxJ1AXZkMEAaDGAGEVxHVUARRQtDU34dXjVmMxBcQ1REHXAPQ11LUjIEKgMWVUtTSxN0AE9dehpcDG8LFF1FVEYURQhHVXoYXAJkABJtQQ%3d%3d; __jdv=122270672|mydisplay.ctfile.com|t_1000620323_|tuiguang|ca1b7783b1694ec29bd594ba2a7ed236|1598597100230; __jdu=15985970988021899716240; shshshfpa=7645286e-aab6-ce64-5f78-039ee4cc7f1e-1598597100; areaId=22; ipLoc-djd=22-1930-49324-0; PCSYCityID=CN_510000_510100_510116; shshshfpb=uxViv6Hw0rcSrj5Z4lZjH4g%3D%3D; __jdc=122270672; __jda=122270672.15985970988021899716240.1598597098.1598597100.1599100842.2; shshshfp=f215b3dcb63dedf2e335349645cbb45e; 3AB9D23F7A4B3C9B=4BFMWHJNBVGI6RF55ML2PWUQHGQ2KQMS4KJIAGEJOOL3ESSN35PFEIXQFE352263KVFC2JIKWUJHDRXXMXGAAANAPA; shshshsID=2f3061bf1cc51a3f6162742028f11a80_5_1599101419724; __jdb=122270672.11.15985970988021899716240|2.1599100842; wlfstk_smdl=mwti16fwg6li5o184teuay0iftfocdez'

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.14 Safari/537.36 Edg/83.0.478.13","cookie":cookiestr}

try:

r = requests.get(url=url,headers=headers)

r.raise_for_status()

r.encoding = r.apparent_encoding

print(r.text[:1000])

except:

print('爬取失败')import requests

kv = {'user-agent':'Mozilla/5.0'}

url = "https://item.jd.com/100006713417.html"

try:

r = requests.get(url,headers = kv)

r.encoding = r.apparent_encoding

r.raise_for_status()

print(r.text[:1000])

except :

print('Error')

均得到了我们想要的结果

ee3205bb3a2b976dd7bb044378139c49.png

二、爬取亚马逊实例import requests

url = "https://www.amazon.cn/dp/B072C3KZ48/ref=sr_1_5?keywords=Elizabeth+Arden+%E4%BC%8A%E4%B8%BD%E8%8E%8E%E7%99%BD%E9%9B%85%E9%A1%BF&qid=1599103843&sr=8-5"

try:

r = requests.get(url)

print(r.status_code)

print(r.encoding)

print(r.request.headers)

r.encoding = r.apparent_encoding

print(r.text[:5000])

except :

print('Error')

同样的问题出现了,老师在这里做了讲解,亚马逊也是有来源审查的,在没有修改headers参数的时候,程序告诉亚马逊服务器这是个py requests库的访问

38d45a61fd65a30f00244e5d47f4a7e1.png所以出现了错误。

2.解决方法

和上面一样,修改user-agent即可

结果:

906acb60e169441e646b7b080bd7a9ba.png

还是出现了问题,下方有提示,

07431148aef3f6f37cfe558067a9bedf.png

这里提示可能出现了与cookie相关的问题,于是我们找到网页的cookie,放到headers里面去

0f80f3d941d130f7f8616004c190f293.png

问题成功解决

三、爬取图片

当我们想要爬取网页上面的图片的时候我们应该怎么做呢。

现在知道网页上的图片链接的格式为71b296ef71a9c677a2c4eedc9c466075.png

url链接以jpg结尾说明为图片

根据崇天老师的提示写了一段代码import requests

import os

url='https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2588111137,2818876915&fm=26&gp=0.jpg'

root='d:/pics//'

path = root+url.split('/')[-1]

try:

if not os.path.exists(root):

os.makedirs(root)

if not os.path.exists(path):

r=requests.get(url)

with open(path,'wb') as f:

f.write(r.content)

f.close()

print('文件保存成功')

else:

print('文件已经存在')

except:

print('爬取出错')

这里import os来判断文件时候存在

上结果

d4174fb82cb4ad5875e64a9ff70a58a3.png

0df304526fba4a73842ff7c4142137c9.png

图片也得到了保存

IP地址归属地自动查询

在进行实战的过程中遇到了小问题

先上代码import requests

url_1 = 'https://www.ip138.com/iplookup.asp?ip=112.44.101.245&action=2'

ip_address = input('Please input your ip address')

url = url_1+ip_address+'&action=2'

if ip_address:

try:

r = requests.get(url)

print(r.status_code)

print(r.text[-500:])

except:

print('error')

else:

print('ip address cannot be empty')

然后程序一直报error,于是我拿掉了try except模块,看看问题出在哪

果然问题出在来源审查

672159d5274e6bc4c1080a87513e9430.png

这行报错说明了ip138网站应该是有来源审查,于是改掉headers中的agent再试试

修改user-agent参数之后,随便找了个美国的IP地址,成功了先上图

2efa2e9e63a1d664c0badc71b66a220f.pngimport requests

url_1 = 'https://www.ip138.com/iplookup.asp?ip='

ip_address = input('Please input your ip address')

kv={'user-agent':'chrome/5.0'}

url = url_1+ip_address+'&action=2'

if ip_address:

try:

r = requests.get(url,headers=kv)

print(r.status_code)

r.encoding=r.apparent_encoding

print(r.text)

except:

print('error')

else:

print('ip address cannot be empty')

第二周

Beautiful Soup库

1.安装Beautiful Soup库

CMD pip install beautifulsoup4

2.requests库获取网页源代码import requests

r=requests.get("https://python123.io/ws/demo.html")

print(r.text)

3. bs库的使用

0e9fe6174cf1005f28397b70e525bc2f.pngimport requests

from bs4 import BeautifulSoup

r = requests.get("https://python123.io/ws/demo.html")

demo = r.text

soup = BeautifulSoup(demo,'html.parser')

print(soup.prettify())

4. bs库的基本元素

620c69209a2d498ffae6e4f9f5a03f2f.png

8291b638119ee31fbc9bdffb532b33b9.png

68e1d0e755239e94e251f6aec1391146.png

bs库这里我有点懵,主要是对HTML之前了解不太多

af8d88c3617fc72b237fa64b9ffaf026.png

0d14fc70667464cf2877da090fe8f85c.png

三大信息组织形式:YAML,XML,JSON

之前搭建博客,用的就是这个YAML,踩了很多坑,yaml语言有严格的缩进要求,没写对就会报错

5.实例: 中国大学排名抓取

在demo中实现信息提取

find_all(str) 函数

正则表达式库 re :import re

re.complie('b'): 表示以B开头的所有元素

find_all 方法的用法

255020b8d96d349ce78ebe140ff397f8.png

1463d6beb1587a0415528183d6c351dd.png

封装成三个函数,结构清晰

上代码和结果from bs4 import BeautifulSoup

import bs4

import requests

def getHTMLText(url):

try:

r=requests.get(url,timeout=30)

r.raise_for_status()

r.encoding=r.apparent_encoding

return r.text

except:

return ""

def fillUniList(ulist,html):

soup=BeautifulSoup(html,'html.parser')

for tr in soup.find('tbody').children:

if isinstance(tr,bs4.element.Tag):

tds = tr('td')

ulist.append([tds[0].string,tds[1].string,tds[2].string,tds[3]])

def printUniList(ulist,num):

print("{:^10}\t{:^6}\t{:^10}\t".format('排名','学校名称','省份','总分'))

for i in range(num):

u=ulist[i]

print("{:^10}\t{:^6}\t{:^10}\t".format(u[0],u[1],u[2]))

def main():

uinfo=[]

url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html'

html=getHTMLText(url)

fillUniList(uinfo,html)

printUniList(uinfo,20)

main()

c4f1f65afc21eca38b911c5900fe3629.png

发现没对齐

752ef46136e5b35bb408dcd19b555330.png

利用format函数将输出对齐

21254e7b84c2efa6d02ebefbfb59baf5.png

第三周

正则表达式

1.语法

34f0d39f46175536f8eb6150b4a5e4ea.png

dbff61e1fea9de8a4a687699a2123316.png

e6cda745d233d370f6cbe493a39b47e0.png

7ad1a6117dbdf7e8394729c16c657006.pngsearch838eb688608e18038a4dd0b79c2b1ca6.png

4ad0486bca398ca72d1def357bb945ef.pngmatch2662801c5738036fb54a7f1ccccba530.png

findall41afb6b0dbe899ed4b7c6c5205dcc662.png

splitc6a99edbc5635253452dae210f568027.png

finditer3879febbea46dcd2f5bab7305850aaf8.png

c035a20d71bd2ee7efa5c0138e28a56e.pngsub 40143859dc67937092d27c90606df987.png

complie5d1b5f34ccaafce6940dd9a10aa8d836.png46c32b1d141ba55765564c2209ed3805.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值