爬取吉林大学官网新闻信息
日常获取页面源代码
url = "https://news.jlu.edu.cn/jdxw/xykx.htm"
headers = {
"user-agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0"
}
resp = requests.get(url,headers=headers)
print(resp.text)
会出现报错
requests.exceptions.SSLError: HTTPSConnectionPool
出现这个问题原因是:ssl验证失败
解决方法是:关闭证书验证(verify=False)
resp = requests.get(url,headers=headers,verify=False)
获取源代码后发现有部分乱码 寻找charset值即可
resp.encoding = "UTF-8"
之后得到要爬取的xpath即可
title = li.xpath("./a/text()")[0]
data = li.xpath("./span/text()")[0]
src = li.xpath("./a/@href")[0].replace('..','https://news.jlu.edu.cn')
src1 ="https://news.jlu.edu.cn"+ li.xpath("./a/@href")[0].split("..")[-1]
这里由于对应的网址是相对路径 因此要做字符串拼接处理
写了两种处理方法:替换和分割拼接
之后还需要:1、把网址变为多个,获取多页的新闻
2、做文件的a操作
3、time设置延时,防止对网页造成影响
要实现python代码的整体缩进与退格,只需要选中代码,然后按相应的快捷键即可。其中:
-
缩进 :Tab键
-
退格 :Shift + Tab键
最终源码为
import requests
import time
from requests.api import head
from lxml import etree
for a in range(10):
if(a == 0):
url = "https://news.jlu.edu.cn/jdxw/xykx.htm"
else:
url = "https://news.jlu.edu.cn/jdxw/xykx/{}.htm".format(101-a)
headers = {
"user-agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0"
}
resp = requests.get(url,headers=headers,verify=False)
resp.encoding = "UTF-8"
html = etree.HTML(resp.text)
lis = html.xpath("/html/body/div[4]/div[2]/div[2]/div[1]/ul/li")
for li in lis:
title = li.xpath("./a/text()")[0]
data = li.xpath("./span/text()")[0]
src = li.xpath("./a/@href")[0].replace('..','https://news.jlu.edu.cn')
src1 ="https://news.jlu.edu.cn"+ li.xpath("./a/@href")[0].split("..")[-1]
print(title,data,src,src1)
with open('sample/JLU.txt','a') as f:#写入文件中,文件默认和python文件同一级目录
f.write("{} {} {}".format(title,data,src))
f.write("\n\n")
time.sleep(0.2)
f.close()
print("下载成功")