前言:
每个网站站长都有一颗想出名的心,我也不例外,今天我将自己网站 is-hash.com 的几个网页全部主动推送给了度娘(curl推送),一路上用到一些技巧,在这里做个记录。
推送过程
其实百度curl推送并不是个难事,就是将要提交的链接按照每行一条的格式写入一个文本文件中,命名此文件为urls.txt,然后进入该文件所在目录,执行如下命令:
curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com………………"
就推送了,很简单的一件事情,但是对于我却不容易,因为我已经写了一百左右篇文章了,我想要全部推送,那将一百多个链接写到txt文件中不免有些繁琐,于是我就使用python结合Xpath模块写了一个爬虫程序,将我的网站的主页的几个链接全部爬取并且保存。
python代码奉上
import requests
import parsel
#返回页面的全部代码
def get_http(myurl):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
response=requests.get(myurl,headers=headers)
data=response.text
data.encode("UTF-8")
return data
#通过xpath得到需要的url
def get_url(data):
#存储数据的列表
dataList=[]
urldata=parsel.Selector(data)
#模糊匹配
XpathSelect='//*[contains(@id,"post")]/header/h2'
parse_list=urldata.xpath(XpathSelect)
for h in parse_list:
url=h.xpath("./a/@href").extract_first()
dataList.append(url)
return dataList
def download(list):
with open('urls.txt','w') as f:
for url in list:
f.write(str(url)+"\n")
#当前文件为启动文件
if __name__=="__main__":
#这个列表将会收集全部的网页链接
allUrl=[]
for page in range(1,12):
# 用{}预留一个接口,通过.format将页数进行传递
base_url = "https://www.is-hash.com/page/{}/".format(page)
#得到这一网页的源代码
http=get_http(base_url)
#得到源代码中的url
urls=get_url(http)
for url in urls:
allUrl.append(str(url))
#加个提示给控制台
print("已经爬取完第"+str(page)+"页")
#下载链接
download(allUrl)
上面有些地方对我比较陌生,记录一下
- Xpath语法中的contains方法是一个模糊匹配的方法:匹配一个属性值中包含的字符串
- extract_first():这个方法返回的是一个string字符串,是list数组里面的第一个字符串。
- 我的网站目前共有11页,url的变化规律是/page/1-11,所以外面用了个大循环。
经过一番猛干,终于拿到结果
兴奋的我赶紧将txt文件传到服务器上,远程执行了命令,结果返回了一个这:
{
"remain":10000,
"success":0,
"not_same_site":[ ……一堆url…… ],
"not_valid":[]
}
按照百度的说法就是:还可以提交10000个,提交成功0个,“一堆url”不是本站url而未处理。
???
我有点懵,经过一番搜索终于知道,原来是因为url中的域名还要写上www(看看百度给你的接口是不是也有www,那你应该也要写了)。
一行一行手写吗?
如果你有VSCode,那么就可以利用vsCode的“可视区块操作”(我起的名,因为这个类似vim的可视区块),找到关键字,按下Ctrl+D,多行统一操作:
只能用 爽 来形容。
修改好文件之后再上传,应该就不会有问题了。
留个言点个赞吧!
商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢