爬取一个页面的信息
我想要爬取这个页面的信息https://www.shanghairanking.cn/rankings/bcur/202011我自己写了点 ,但不太懂
import requests
from lxml import etree
url = 'https://www.shanghairanking.cn/rankings/bcur/202011'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'}
r = requests.get(url, headers=headers)
r.encoding = 'utf-8'
html = etree.HTML(r.text)#利用etree.HTML,将字符串解析为HTML文档
x = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/a/text()')#//获取文档中所有匹配的节点
d = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/text()')
print(x)
print(d)
怎么让他排版和网页一样 怎么会有很多的逗号 /n 之类的东西
求求解答 感激! import requests
from lxml import etree
url = 'https://www.shanghairanking.cn/rankings/bcur/202011'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'}
r = requests.get(url, headers=headers)
r.encoding = 'utf-8'
html = etree.HTML(r.text)#利用etree.HTML,将字符串解析为HTML文档
x = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/a/text()')#//获取文档中所有匹配的节点
d = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/text()')
for i in range(len(x)):
print(x,d) 逃兵 发表于 2020-12-22 15:58
加的代码什么意思,len(x), 10:13 逃兵 发表于 2020-12-22 15:58
爬取这个网页的完整代码能写下么 import requests
from lxml import etree
url = 'https://www.shanghairanking.cn/rankings/bcur/202011'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}
# 获取网页源代码
res = requests.get(url=url, headers=headers)
res.encoding = 'utf-8'
html = etree.HTML(res.text)#利用etree.HTML,将字符串解析为HTML文档
# 建立字典,存放排名与学校名
# university = {}
# 用xpath解析html文档,//表示当前节点的子节点或孙子节点,/表示当前节点的直接子节点,@表示属性,text()表示html文档标签的内容
# 取出排名
num_data_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/text()')
len_num_data = len(num_data_list)
# 取出学校名
name_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/a/text()')
# 用索引值遍历排名
for i in range(len_num_data):
# 处理排名格式,先用换行符切片,排名在切片后的第二个元素,再用lstrip()去除数字前面的空格
num = num_data_list.split('\n').lstrip()
# 因为排名和学校名一一对应,所以可以用索引值来对应他们
name = name_list
print(num, name)
# university = name
# print(university)
当前代码是直接打印
把16,32,33取消注释,再把30行注释,就可以把排名及学校名存入字典 私はり 发表于 2020-12-22 18:31
爬取这个网页的完整代码能写下么
你写的代码里,html就是整个网页了
x和d都是从html中,根据xpath相同所截取的不同列表
len(x)代表的列表中有多少个元素
d标识d列表第i个元素中的第10~13个字符串
比如
d = '\n 北京\n '
d = ' 北京'
d = '北京'
逃兵 发表于 2020-12-23 08:20
你写的代码里,html就是整个网页了
x和d都是从html中,根据xpath相同所截取的不同列表
好的 太阳总会升起 发表于 2020-12-22 20:56
当前代码是直接打印
把16,32,33取消注释,再把30行注释,就可以把排名及学校名存入字典
我想爬取排名 学校 总分 类型 省市 层次 全爬下来
能不能写一下
我尝试了下 写不出来 私はり 发表于 2020-12-23 14:27
我想爬取排名 学校 总分 类型 省市 层次 全爬下来
能不能写一下
我尝试了下 写不出来
import requests
from lxml import etree
import openpyxl
url = 'https://www.shanghairanking.cn/rankings/bcur/202011'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'}
r = requests.get(url, headers=headers)
r.encoding = 'utf-8'
html = etree.HTML(r.text)#利用etree.HTML,将字符串解析为HTML文档
x = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/a/text()')#//获取文档中所有匹配的节点
d = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/text()')
l = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/text()')
z = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/text()')
c = html.xpath('//*[@id="content-box"]/div/table/tbody/tr/td/text()')
wb = openpyxl.Workbook()
ws = wb.active
title = ['排名','学校','总分','类型','省','层次']
print(title)
ws.append(title)
for i in range(len(x)):
lst=.strip(),z.strip(),l.strip(),d.strip(),c.strip()]
print(lst)
ws.append(lst)
wb.save('大学排名.xlsx')
逃兵 发表于 2020-12-23 15:28
感谢 私はり 发表于 2020-12-23 14:27
我想爬取排名 学校 总分 类型 省市 层次 全爬下来
能不能写一下
我尝试了下 写不出来
还是和取出排名的一样,处理方法也一样,你可以把相同的写一个函数来调用
import requests
from lxml import etree
url = 'https://www.shanghairanking.cn/rankings/bcur/202011'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}
# 获取网页源代码
res = requests.get(url=url, headers=headers)
res.encoding = 'utf-8'
html = etree.HTML(res.text)#利用etree.HTML,将字符串解析为HTML文档
# 用xpath解析html文档,//表示当前节点的子节点或孙子节点,/表示当前节点的直接子节点,@表示属性,text()表示html文档标签的内容
# 取出排名
num_data_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/text()')
len_num_data = len(num_data_list)
# 取出学校名
name_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/a/text()')
# 取出省市
city_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/text()')
# 取出类型
type_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/text()')
# 取出总分
score_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/text()')
# 取出层次
level_list = html.xpath('//div[@class="rk-table-box"]//tbody/tr/td/text()')
# 用索引值遍历排名
for i in range(len_num_data):
# 处理排名格式,先用换行符切片,排名在切片后的第二个元素,再用lstrip()去除数字前面的空格
num = num_data_list.split('\n').lstrip()
# 因为排名和学校名一一对应,所以可以用索引值来对应他们
name = name_list
city = city_list.split('\n').lstrip()
type_ = type_list.split('\n').lstrip()
score = score_list.split('\n').lstrip()
level = level_list.split('\n').lstrip()
print(num, name, city, type_, score, level)
太阳总会升起 发表于 2020-12-23 15:56
还是和取出排名的一样,处理方法也一样,你可以把相同的写一个函数来调用
非常感谢 ,我之前用你那个代码改写的和你差不多,但是没有那个换行导致很多空格和逗号之类的东西,运行就会卡死 再次感谢哈{:5_109:} 私はり 发表于 2020-12-23 16:05
非常感谢 ,我之前用你那个代码改写的和你差不多,但是没有那个换行导致很多空格和逗号之类的东西,运行 ...
没事{:5_91:}
页:
[1]