# -*- coding: utf-8 -*- import requests import pandas as pd from bs4 import BeautifulSoup import re import json #import cx_Oracle from sqlalchemy import create_engine import sys url = 'http://www.sac.net.cn/hyfw/hydt/' for i in range(1): if i ==0: url1='http://www.sac.net.cn/hyfw/hydt/index.html' else: url1=url+'index_'+str(i)+'.html' print url1 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' directory = {'User-Agent': user_agent} response = requests.get(url1, headers=directory) # 告诉他这段文本是以utf8方式编码 所以要以utf8方式解码 response.encoding = 'utf-8' bs = BeautifulSoup(response.text, 'html.parser') title = bs.find('title').string[5:12] print title print url[0:21] table = bs.find_all('table') for a in table: b = a.find_all('td', attrs={'class': 'pad_le30 hei_000'}) #print b for c in b: print c.find_all('a') #print d
#print type(d) #print d.get('href') #print d.attrs.get('href')
今天在使用爬虫爬取网页时,一直抓取不出想要的链接。
原网页的源代码是
然后我就想使用 .get('href')来取出想要的a标签中的连接,结果一直输出的都是None.
在询问过一些身边比较厉害的朋友后,说是双重循环双重列表所以取不出来。
接着我输出d的结果是没有问题的,那么问题究竟是什么原因呢?
最后才明白,原来findall返回的是list,list没有href。于是就把原来的print d.get('href')改成print d[0].get('href')然后运行,就成功了。不过输出的连接很奇怪。
这个是链接是缺省的url,对于这些缺省的url,前面的是当前url的域名,也就是当前url域名+缺省url就是真实的url
再回过头来print d 和 print d[0],我们很明显就能看到一个输出的是列表,带有[]。后者输出的则是列表中的第一个元素。这样我们才能从标签中取出想要的href属性。还可以使用.string来获取中文哦!